Elm Town 81 – Inspired: Bubble Tea with Christian Rocha
[00:00:00] Christian: What I found so attractive about Elm was that it, it wasn't absolutely obsessed with the notion of, of monads. It Didn't focus on them as, as the thing you should be doing.
[00:00:10] It was more like, let's focus on actually making something.
[00:00:12] Jared: Hey folks, welcome back to Elm Town. I'm your host, Jared M. Smith. We'll be visiting with Christian Rocha today. He's coming from all the way out in the Charm Galaxy. More on that in a bit.
[00:00:23] Sponsored by Logistically
[00:00:23] Jared: But first, let's talk about our sponsor, Logistically. At Logistically, we make intuitive software to help logistics teams make better decisions and improve efficiency. 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 at elmtown at logisticallyinc. com.
[00:00:41] Introducing Christian
[00:00:41] Jared: Now, Christian. Christian is the founder and CEO of Charm. He has a multidisciplinary design and engineering background and draws inspiration from pop culture, fashion, food, and video games.
[00:00:54] He's the creator of Bubble Tea, the TUI framework based on and inspired by The Elm Architecture. Christian, welcome to Elm Town.
[00:01:03] Christian: Thanks for having me.
[00:01:04] Jared: Yeah, Glad to have you on. So I wanted to give a little bit of background here. I had started this "Inspired by" series by talking to Hayleigh about Gleam, and then I went and talked to Richard about Roc, and then I was looking for something else, a little bit different, and something else inspired by Elm, and then I happened upon this video, a couple of videos, streams of Bashbunni, your co worker at Charm, doing an Elm side quest, Where she went through the Elm official guide and then I started looking up, What is this Charm?
[00:01:42] What is this Bubble Tea, you know? And she had mentioned that her inspiration for learning Elm was that the Bubble Tea library was based on Elm. And so that's what kind of led me to you
[00:01:56] Christian: that's good. Bash is such a star. She's such a, such a force. We, we, we absolutely adore her.
[00:02:01] Jared: Yeah. Those are good videos. So I'll put links to those in the show notes. If folks want to check those out, if you're learning Elm or want to see what the process is like of learning something or just to check out Bashbunni.
[00:02:12] Origin Story
[00:02:12] Jared: So I want to get started by asking you how you got started in computing and programming.
[00:02:18] What's your origin story
[00:02:19] Christian: Oh, man. I started out by hacking on, hacking on computers in the nineties I had a 386. I had a 386 with a VGA card, which was so fast. All my friends were jealous. I, you know, it was like, it was DOS in those days, and I just wanted to make video games work as a ten year old.
[00:02:40] And that really meant, editing a bunch of config files, uh, to make sure you started off with enough, you got enough memory, like high memory and low memory and stuff. And somehow that became coding and hacking on more computers and, and at some point I needed a job, so I managed to, like, convince somebody to let me code for a living and kind of figured stuff out and here we are.
[00:03:03] Jared: Right on.
[00:03:04] Christian: I had a lot of, uh, imposter syndrome at some point, you know, and I wanted to really What led me to Elm was that I really wanted to, you know, I wanted to be a I wanted to be a really good programmer. And so I, I, um, I thought, uh, and I like hard things. I like, um, I play video games on the hardest difficulty.
[00:03:22] Uh, and so I thought, okay, let's, let's try Haskell then. And it was so hard. As someone who had spent a career doing imperative programming, it was so hard. It was like, um, it would be like if you studied a few romance languages. And then someone gave you a newspaper in Chinese and was like, here you go, read this, and then walked away.
[00:03:48] I remember I was just staring at the screen being like, what am I even supposed to do? But eventually, you know, eventually, you know, I picked it up somewhat. And that's really what led me to Elm, in a way, I guess.
[00:04:03] Jared: Okay. Yeah. Well, I think for me talking about imposter syndrome, like I, I think that it comes in the way of not having learned Haskell. So a lot of those terms of like, you know, monads and whatever, like, I know I use those things in Elm, but I don't have the knowledge to apply those terms to that stuff
[00:04:27] Christian: of don't either, to be honest.
[00:04:29] Jared: Well, I'd say, I feel like if you're learning Haskell, you have to have some knowledge of it, or at least, uh, from what I've heard, a lot of the instructions about how to use different things involve using those terms to explain how to use them. So it's like, it's all tangled together, but there may be different, documentation, tutorials, but
[00:04:52] Christian: What I found so attractive about Elm was that it, it wasn't absolutely obsessed with the notion of, of monads. It It kind of treated them as normal and then, and then kind of, I don't want to say took them out, like got them out of the way, but almost didn't focus on them as, as the thing you should be doing.
[00:05:09] It was, it was more like, let's focus on actually making something. I read this paper by, I tried to read this paper by Simon Peyton Jones. And he was like, it opened, it opened with, "Monads are taking the world by storm." And I can't even, I mean, I'm sure if you're, if you're, if you're doing like, if you're doing Haskell research, definitely they are, but I can't imagine, in, you know, else, I don't know, it seemed like it was such a weird way to think about coding for me, as someone who likes, who's very results oriented in a way, um, or I guess process based, but I like, you know, trying to get something done.
[00:05:45] I don't know, it was up to what, it was almost so nice, but that it just, it took away all that, it abstracted away all that. All the monads and that you focus on output
[00:05:55] Jared: I think,
[00:05:55] and, and so
[00:05:56] I guess to, uh, folks who don't know who Simon Peyton Jones is, that's the creator of Haskell, correct?
[00:06:02] Christian: I'm not sure. I, I know he, he's one of the lead, kind of lead kind of scientists on it, or thought leaders or so to speak. He's one of the, one of the big forces behind it.
[00:06:11] Jared: Okay. I
[00:06:12] Christian: Um, and he's also famously said Haskell's not good for getting work done.
[00:06:19] Jared: Right on. Yeah. Well, I think, yeah, for me, one of the things that I love about Elm is it's, it's so easy to get started because you are going to see your results. In the browser, right? Like you can make a thing visually and have those results versus a general programming language.
[00:06:39] Oftentimes your first program is running something in, you know, the command line, right. And, and hopefully getting some result there. So, yeah, I think that's something that for me, I was like, Oh yeah, you know, I already knew web programming, so that definitely gave me a leg up. of course, for me, having not learned Haskell first, it was weird because the, the syntax on Elm was so different. And I would look at it and I was like, there was a moment where I thought, you know, maybe I don't need to learn this.
[00:07:07] And I was like, no, no, no, push through. It's going to be fine. And it is. I mean, it's actually, I guess my preferred, I mean, definitely my preferred syntax now. But. You know, it was just a short period of time, you know, like the first day where I was just like, uh, you know, this doesn't look anything like the C syntax of every other language I've used.
[00:07:26] Christian: FP is weird, man. I can't believe people use Nix, to be honest. , for the same reason. , it's like, untyped FP. Um, I struggled with Elm, too, for sure. Like, when I got that, like, it took me a long time to understand, you know, update and things like that. And, and I didn't really, really get it until I started doing Bubble Tea, actually.
[00:07:47] Until I kind of basically started implementing The Elm Architecture, to be very honest.
[00:07:51] Jared: Yeah, that makes sense too. You know, you're trying to really understand it in order to recreate it. So yeah, it's kind of like what you do with when you're teaching as well. I found teaching other people like at work or whatever, it's just like, Suddenly I have to be able to put it into words, whereas before I could just move from my keys into, you know, the keyboard into, uh, into the computer and not have to, tackle it from a different direction.
[00:08:15] So, yeah, makes sense.
[00:08:17] Mentor John Weir
[00:08:17] Jared: so what was it about Elm that got your attention when your friend John Weir had introduced it to you? Was it, was it the, you know, I know you mentioned that it was, uh, kind of simpler and got out of the way, but did you know that going in, or was there something in particular that you were like, Oh, okay, this is why I want to learn it.
[00:08:35] Christian: No, it was John Weir. So, John Weir was so important to me as a, as a developer. Um, for sure a better developer. But I, but all of it, you know, at some point he started telling me the things he was doing. you know, At one point, you know, he, he decided he was going to just use Vim all the time. Uh, and switch to Vim and, and, you know, And again, that for me, that was really hard, having someone that used a non, you know, a not vim, basically.
[00:09:03] Uh, and that, going through that learning curve. But then, you know, It ended up being a really good decision and, you know, I was really happy with it. And so at one point he was like, you know, why don't you, why don't you use Go? And I, he was like, or he's like more like I'm using Go. And I was like, well, if you're using Go, then I'm going to use Go.
[00:09:20] And it was great. I was like, again, it was another success. So I had had enough great John Weir recommendations that he was like, I'm doing Elm. So I was like, well, I should probably be doing that too, man. and, uh, and that was really what, what led me to it. It was, it took me a minute to get used to it, but it was, it was just so much fun.
[00:09:37] The tooling was just so fast and, and, uh, I don't know. It was just such a joy. The formatter is absolutely wonderful. I can't find a better formatter to be quite honest. And just the fact that you can like, belt out a line of code and then it just kind of sorts it out for you, it's just amazing. Just absolutely, just so much fun to work with.
[00:09:54] Jared: You're talking about, how John was, I guess, a mentor for you, right? Is it kind of giving you some, some different things to, to check out and inspired you to check out Elm? That's cool.
[00:10:06] Christian: You know, early on in our career, he was making libraries when I was just like, writing code. And it was, I was like, I didn't know that people I know can write libraries. It was like, it was very inspirational for me to kind of understand that I could actually build tools for other people too.
[00:10:23] It was a big, big, big moment when I saw him doing, doing things like that. Contributing to open source and stuff like that.
[00:10:30] Jared: Yeah, that makes sense. So you were close to someone who was doing these things and that definitely makes you realize like, Oh, that's a real person. I can talk to this person, this person makes these things, you know, they're not some ubermensch, you know,
[00:10:46] Christian: Yeah, I mean, coming back to Imposter Syndrome, I just thought, like, I, I'm definitely not a good enough developer to make, to make libraries, for heaven's sakes, you know?
[00:10:55] Jared: Right on,, but you have, and you did.
[00:10:58] Taking The Elm Architecture to the command line
[00:10:58] Jared: And so how did you go from Elm to, I'm taking this idea to Go on the command line, the idea of The Elm Architecture.
[00:11:06] Christian: starting Charm I had this vision for building TUIs in line, in context, in the terminal, in a way that they would kind of open up, uh, something small, and let you do an action quickly without too much typing, and then kind of, kind of go back to what you're doing and close up.
[00:11:20] And, Go was the, Go was the, made the most sense for doing things, Uh, in the terminal on that, um, you could, you could, um, build statically linked binaries very easily and cross compile them and you got a lot of good, you got a lot of, you got Windows support, you had BSD support, you had Linux support, and Mac OS support, obviously.
[00:11:37] It just seemed like a very natural choice. And it looked like, going into it, that there was this huge array of, of this kind of, like, renaissance happening of, of TUI libraries. And, It turned out, after getting started that there were, you know, some were abandoned, but none of, they all used the alt screen, which was like the full terminal, and I wanted, there was nothing that opened up in line, so it was kind of, and so after a lot of, a lot of trying to find something and a lot of pain, uh, it, I was kind of like, well, I guess we're gonna have to write something ourself.
[00:12:12] And, and having done Elm, what, you know, what I, what I, what I, really was hoping for was something that wasn't, that didn't have to, like, something where you could tell it, give it a view, tell it what you wanted the UI to look like, and have the renderers basically figure it out for you so you didn't have to go do low level ncurses type of stuff.
[00:12:32] And so, somehow in there it turned out that even Go is the most imperative language in the world, the type system is so, is such that You can kind of, type system is such that it has first class functions so that you can basically coggle together an Elm like kind of situation with channels and with types and with functions basically.
[00:12:53] And that's sort of what happened and it was just almost this accidental success because it turned out other people wanted to do that too, I guess.
[00:13:02] Jared: Yeah. So by success, you mean that people use the library.
[00:13:07] Christian: Yeah, we put it out there, we open sourced it, because a big thing when starting Charm was like, we really wanted to be open source. Like, open source first, and it just made sense for the CLI, I think it made sense for developer trust, being able to kind of, open up libraries and look at them, and, you know, make sure they're not doing anything malicious, and also just, you know, open source was cool, was what it really was.
[00:13:30] So we open sourced it and, and actually some of the most important, important contributions to it came from the open source world and there are things that we're able to do with it now that we would not have possibly been able to do on our own. Um, so in that regard it was, you know, it was really, really great that we, I was very, it was a wonderful decision to open source that and everything else.
[00:13:51] John Weir's question
[00:13:51] Jared: As we're talking about bringing The Elm Architecture to Go, there is a question from John Weir here. He says, quote, what difficulties in bringing The Elm Architecture-ish to Go, and would Go's generics make that easier or better today? The type systems are quite different.
[00:14:11] Christian: So the biggest thing for me is that, , There are no sum types. And so, essentially, you can't exhaustively, uh, switch over a, or I guess case match, pattern match over a, over a type.
[00:14:25] So you just have to be very thorough. And there are, the linters kind of help with that. But that's the, that's the biggest thing, uh, for me, that I would love to see in Go. Uh, generics haven't really helped much, uh, like surprisingly, I don't know why, but they're just, We're kind of fine just typeswitching, because the typeswitches are actually pretty good.
[00:14:40] Um, and it kind of stands in the place of generics, I think, for what we need. Um, but otherwise, it's an oddly, an oddly good match, somehow. The, uh, the biggest hurdle, the biggest problem I see is that because it's not purely functional, It's possible for developers to go say, mutate the model in a view or something like that.
[00:15:03] And it's more of like, it's more, it's kind of like a Scala type of thing where you have to just stand by your guns and not, and not do all the things that mutate stuff all over the place.
[00:15:12] Jared: Right on, yyeah, well, I only played with Bubble Tea a little but
[00:15:18] that was one of the things that I noticed that there was, or there didn't seem to be exhaustive type checking. And I was going to ask about that because I was looking at the different, you know, looking for my Msg. You know, like what options do I have here with this?
[00:15:32] You know, and how do I add one? And then I kind of figured that out, like, Oh, okay, this can really be anything. So, yeah, but that, that, makes sense. Um, but yeah, I mean, you know, obviously there are trade offs there, right. But, um, you've made it work.
[00:15:48] Bubble Tea related tools
[00:15:48] Jared: And so I guess we could talk a little bit about the related products, about things you've built on top of Bubble Tea a little bit.
[00:15:56] You want to talk about that?
[00:15:57]
[00:15:57] Christian: The first thing we built on, uh, with Bubble Tea was really Glow. And, um, you know, that really, that really helped us kind of build out the kind of component ecosystem. When you think about Elm, there's a, you know, you get the little, little, little input, uh, or a little text area.
[00:16:13] You kind of get it for free, basically, because it's coming from the browser. But in the, in the terminal, none of those things exist. So we had to code it from scratch, basically. There's a ton of nuance that goes into a nice little, little text input having, you know, modifier keys and jumping between characters and words and end of the line, beginning of the line and how the things scroll when you get off, that we'd scroll horizontally when you get out of the viewport.
[00:16:36] So to speak, that little thing. Double-width runes, which are a whole situation, and East Asian characters, and emojis, and things like that. And that was really, um That's really what kind of Glow did, and Glow is a markdown viewer, uh, with a TUI around it, so you can kind of browse and find markdown on your local machine.
[00:16:55] Um, at one point, and I'd say this was probably the most effective use of Bubble Tea, and I would say truest to its intent of being like a little thing that opens up TUIs for you, Um, we wanted to, Bring kind of all the stuff we've done with the components of Bubble Tea, Bubbles, we would call them. And Lip Gloss, which is our kind of library for layout and styling, I guess, on the CLI.
[00:17:22] We wanted to kind of bring that to people who didn't code Go. So, we made a library called Gum. And Gum was basically exposing all these little sort of UIs, uh, that you could pipe stuff into, or, or pipe stuff, or, or send stuff out from, and you can kind of fit into, um, command line pipelines. So there's a little, a little thing called gum write, where it'll open up a little text area, and if you pipe something into it, it'll populate the little text area, and if you, and then you can send that out.
[00:17:49] So what we do a lot of times, you could say, you could make a little, little script, or you could gum write and then pipe it into a git commit message and then you'd have a little TUI for that. A lot of little, little tiny things that make life, uh, easier. We even saw, , Greg K. H., the Linux kernel maintainer, use it in his scripts and contribute to it, which was a humbling moment, to be sure. But it was just such a, such a handy little, little bit of interactivity. And I guess, um All that comes down to the fact that people don't want to type as much on the command line, I guess.
[00:18:23] Jared: Yeah, some really neat stuff that's come out of it. One that really blew my mind was the TUIs over SSH. That's really crazy.
[00:18:32] Christian: that was such a, that was such a moment. We had this library called Wish, which was for making, for, you know, for basically making applications with SSH as a protocol. And, you know, we had Bubble Tea, and then at one moment we were like, Boop! And we put them together. We were like, wait a minute, we can serve TUIs over SSH, and it worked like a charm.
[00:18:51] Nope, or I guess pun intended. Um, if you go to git. charm. sh, that's a Soft Serve, uh, uh, , Self hostable git server for the command line that, uh, Ayman here in New York really kind of brought to life.
[00:19:06] It's, uh, essentially, it's a, it's a, it's a wonderful show of force of kind of all of our work, in a way. You know, it has Wish, our SSH library, and Bubble Tea, our TUI library, and the git functionality in Wish, and Bubbles, all those kind of, , utilities are the components, I guess, for Bubble Tea. And, um, it works on your phone, if you have a terminal on your phone like I do, and it uses the mouse so you can tap it.
[00:19:29] It's a whole, it's, it's a wonderful, wonderful kind of demo, I think, for all the different things we're thinking about and what we can do. It's, it's a really special one.
[00:19:37] It's very, very, very interesting. I think it's, it's something, it's a kind of a notion that has so much more, , we can get from it without, I don't know, we haven't spent enough time thinking about it as a community.
[00:19:47] Jared: Sure. Yeah, but that's really cool. I do recommend checking out that, uh, git. charm. sh. That's, that's a pretty mind blowing thing. And I'm, I'm guessing that because you have like READMEs in there, you can render the markdown in those, like those things are all because you've built these other libraries, right?
[00:20:08] Christian: Yep, exactly. Oh yeah, so it's, that's a lot of things coming together. We have, that's Glamour, the, the, uh, the Markdown Renderer, and Bubble Tea, and Bubbles, and Wish, it's all, it's like, it's really a great, uh, it's a great kind of thing, it's a great piece for demoing what Charm is, kind of, can do, because it has so many different parts to it.
[00:20:23] Background in design/branding
[00:20:23] Jared: Really cool. Let me ask you, how does your background in design inform your work on Bubble Tea and the related products at Charm?
[00:20:31] Christian: that's a good question. We spend a lot of time with the kind of visual nuance and attention to detail and brand. I think it's such an important part of our work and I think it's important for, I think it's important for tech.
[00:20:42] One of the things I really wanted to do when we started Charm was sort of change the way Technology speaks to people and change the way tech companies ... challenge the notion of what a tech company can look like and what a tech company can sound like. And, um, you know, on the brand side, that meant, um, you know, it meant being silly and kind of having fun and being playful and taking, kind of like, dampening this sort of, uh, hyper masculine narrative, for lack of a better word, And then, uh, you know, in the CLI itself, it just means actually spending design effort on a CLI, which you don't, which I think has really worked for us because you don't see that many, that much design on the command line space.
[00:21:26] There are some beautiful TUIs out there, though, don't get me wrong. Lots of stuff from our community and from just kind of the larger community as well. Uh, but I think, Having, having design be part of the conversation, part of the main conversation for a tech company is something you don't, you don't see that often, especially for someone making developer tools.
[00:21:45] And so it's been a, it's been very, very important for us.
[00:21:48] Jared: Yeah, I think it's really neat, and I think it's neat, like, one example that really popped out to me is No pun intended. Um, I know Pop's another tool, but VHS is, uh, very cool, I think. And, uh, you can talk a little bit about what that is, but one of the things that I liked was the little, uh, GIF that shows how it demonstrates how it works.
[00:22:14] It has this cool, like, uh, Beta, Filter on it. And as a kid, I was, I had, you know, a Beta player. And so it was like, it really stuck out to me. I was like, Oh, this is really neat. I mean, just the concept of VHS in general, which, you know, you can talk about, but that was just like, Whoa, that's, that's not something I've, I've seen before and, you know, just really.
[00:22:35] Yeah. It, uh, I guess it was not just like a, a rational, it spoke more, you know, emotionally to
[00:22:41] Christian: Oh yeah. Emotions are really strong. That's why I got into branding because I thought like, well, you could build products or you can, you know, do branding and affect people emotionally. And they're all important, but I found it very, very powerful to kind of, kind of be able to work on an emotional level as well as a, as well as a practical one.
[00:22:58] Um, that was a, that I, when I was in school, I, I did a lot of motion design, and that's kind of where that came from, and there, um, this was like, this was like After Effects, like post production on a terminal recording, I guess. On a VHS recording, that's the, that's VHS is the, the product. Yeah, that's been, just, I think overdoing the visuals is kind of what we do, what we, what I think is important because the terminal itself is so minimal and so flat that overdoing everything else and using 3D in our work and stuff is just, is an important contrast.
[00:23:31] Also, but also it's just fun and it's just fun to be opulent and that's kind of how we are.
[00:23:35] What is VHS?
[00:23:35] Jared: Yeah, it is fun. So, what is VHS? What is it for?
[00:23:41] Christian: VHS, um, is for scripting, uh, basically what happened was, we had been making, GIFs were such an important part of our, of our, of our work and marketing and kind of showing, showing what we're doing basically. Uh, READMEs are a really thing, a thing we spend a lot of time on thinking about because it's in order kind of to deliver, you know, to kind of help, help people understand what's going on.
[00:24:00] And GIFs are so great because they're silent, and they loop. And you can't stop them, but they also kind of don't bother you unless they're, as long as they're not too crazy. And so, um, the autoplay. So, uh, we, we kind of really leveraged, uh, the, the GIF, and we had done a lot of engineering on making good GIFs.
[00:24:19] And then at some point, it be, it made sense to, uh, uh, one of our engineers, Maas, Had enough, had enough make, had enough with gif, gif recording, and scripted this, and kind of went down this rabbit hole and, and scripted, um, scripted this whole entire situation for scripting gifs, and then recording gifs, and then You know, it had its own language, and then there was like a TreeSitter implementation, and then the language got into GitHub somehow, and then into Helix, this text editor.
[00:24:53] It was a, it was a great exercise on, on, on just kind of going all the way. We didn't know it was going to be such a success. We thought we were just going to open source it and kind of get on with our day. But, um, but yeah, it turns out that's a thing a lot of people want to do. And I guess that asciinema is a good testament to that.
[00:25:11] Jared: asciinema. Tell me about that.
[00:25:13] Christian: Oh man, um, asciinema is absolutely brilliant. From what I, it's been a while since I used it. 'cause we have VHS, but, uh, you basically, it records terminal sessions to a, uh, to a, what I wanna say is a JSON file, and then you can literally play back this playback what happened in the terminal with JSON.
[00:25:33] And it's, it's, it's amazing because it's a data format. It's a lossless format. You can conceivably go back and change the font or change the background color and stuff. The only reason it didn't work for us is because it doesn't autoplay and it's a video. It's essentially, you can't embed it in a GitHub readme.
[00:25:49] Jared: All right. So that was a something that already existed.
[00:25:53] Christian: Yeah, yeah, asciinema's been around for a long time. It's a wonderful, wonderful format. Again, it's not a, it's not, it's technically a video format, but it's, it's its own thing. And it's absolutely brilliant. It just doesn't, just doesn't fit in a GitHub readme quite well.
[00:26:08] How has the architecture of Bubble Tea held up?
[00:26:08] Jared: Right on. Okay. Your first commit on Bubble Tea was in January of 2020 or four and a half years ago. How has the architecture of Bubble Tea held up? Are you still happy with that choice?
[00:26:22] Christian: We are. Uh, we're making, you know, we're working on a V2 right now, which is, Which is a lot of, a lot of stuff under the hood and based on our learnings, but I would say, by and large, it hasn't changed much. There was a, you know, the biggest change actually happened in the beginning, um, when, um, originally, there was like a program function and you would pass four functions to it and it'd update and view three functions, I guess.
[00:26:46] And, um, there was a subscriptions one, which didn't really make sense, so we took it out. And then, one of the first, one of the first, uh, issues that came in from the community was, well, why don't you just make these methods on, on the model and that way all the stuff makes more sense. We were like, oh yeah, you're right.
[00:27:03] And I would say ever since then, kind of nothing has changed. There's a bunch of low level things which the, around the way, uh, Lip Gloss, the styling library, and Bubble Tea kind of work together that we're, we're correcting in V2, but otherwise it's almost the same. It's, it's, it's surprisingly okay.
[00:27:19] Jared: Nice. Okay.
[00:27:21] Christian: It feels a little bit weird in Go. I will admit, .still, this kind of functional paradigm in an imperative language, but, and we get, we get a lot of issues, we get, we get feedback from the community about it, but for some reason, it just seems to, it's, it's okay. I don't know why.
[00:27:35] What are you excited about these days?
[00:27:35] Jared: Well, so what are you excited about these days?
[00:27:42] Christian: What am I excited about? I'm still interested in shells and terminals and the way, the way, I think there's a lot of undiscovered, uh, territory there. Mitchell Hashimoto, who's doing, um, who founded HashiCorp, he's doing this terminal called Ghostty, which is, which is by and large a very traditional terminal, but, There's just so much attention to detail there, and it's, and I think, I think ultimately, you know, there is a larger vision for what journals could be that he's working on.
[00:28:07] I think that's exciting. We spent a lot of time thinking about really, really nerdy, low level terminal things, and shells, and how they can talk to each other, and how they could. I think encryption is very interesting. It's something we're thinking more about, uh, SSH and encryption, and things like that, and things that I think that really matter to open source.
[00:28:27] Those are the things I find really exciting in a nerdy kind of a way.
[00:28:33] Jared: Cool. Well, we'll have to stay tuned. See what comes. One thing that I just thought of as we were talking about Elm earlier, you had mentioned before we had started that, and I didn't know this before we started talking, was that there is Elm on the website. Uh, I guess there's still Elm on the website.
[00:28:54] Is that true?
[00:28:55] Christian: Little bits of it, yes. Here and there. The first website we did was all Elm. It was just 100 percent Elm. Which was really fun. But, you know, as we grew, It made more sense to just do plain old static HTML, but um, which is a wonderful thing, I must say, but um, but there are still, there are still components of the, of a, still some components of the old site that are, that are little Elm bits in there, and it's nice to see that they've, they've done great all these years, and, and were able to kind of embed them in, in HTML the way they were intended to be, I guess, in some capacity, in like maybe early, early Elm thinking.
[00:29:32] Jared: Yeah. No, totally. I think, uh, most of my career that I've used Elm has been starting with Elm in an existing project where it was already using AngularJS or, you know, some other other framework, and now you gotta, start transitioning that to Elm. And the way we've always done that is to embed that inside of the Angular so that, you know, there's be some Directive that's, you know, a little Elm, a little bit of Elm, a little element of Elm in there.
[00:30:04] And, uh, it, yeah, it really works that way. And I mean, we've made it, you know, I've been working at this company almost six years and, you know, we've, we still have some Angular in there and we still have to embed Elm around the, uh, the edges. But I mean, most of it, we're transitioning to like Elm pages and like.
[00:30:24] All that stuff, but you know, there's still, you know, there's just, there's a lot of code. It's pretty, uh, a pretty useful technique. And I think it's, uh, it's really, aged well, you know, it still works.
[00:30:35] Christian: You, you talked about Roc. Roc is similar, like, uh, Elm on the server, I want to say, in a way, right?
[00:30:41] Jared: Um, well, it has this concept of platforms and I can't really do it justice when I was talking with Richard about it. He does a much better job of explaining it. Um, you know, I think there's this vision of Elm on the back end that, uh, that Evan has that, um, is really kind of like, you know, the, like, if you just want like Elm across the board. I think what Richard is going for And again, I can't really do this justice is like this idea of places where it's like, it's not just like on the server, but it's like, you want to like run an embedded, you know, like Raspberry Pi, like you want to run it there or like, well, something that I think is really cool is that with Roc, you can call it directly from within other programming languages.
[00:31:31] They have examples of that in TypeScript and Python, which is what we use on the back end. So that's where I'm kind of tracking and keep an eye on that. But yeah, it's got some really neat, , properties to it. And I think probably just checking it out and talking to the folks in that community who know more than me would be the way to, to understand it.
[00:31:47] But
[00:31:48] Christian: sounds so fun. Elm on a refrigerator. Can you, I have this vision of, like, writing code for refrigerator firmware for some reason. I don't know why.
[00:31:54] Jared: Yeah, I mean, that's it. It's there. If there's a screen there, you know, it's like, I want to pull up the TUI and, you know, and
[00:32:02] Christian: Oh, I know. TUIs on a refrigerator. Wouldn't that be fun? TUIs on a stove?
[00:32:07] Jared: Yeah. It's great. Why not? Eating the world. It's, it's wonderful.
[00:32:13] Christian: man. Seriously. I would love to find a way to get TUIs, uh, at some point outside of the terminal, too. It's hard. It's a There's a kind of abstract notion I've been kind of toying around with my head, and I can't really put it to words. But, uh, something beyond. Beyond the Terminal would be really interesting.
[00:32:33] I would love to see it.
[00:32:34] Jared: Yeah, you gotta stay out there in the, you know, in the galaxy and just kind of see where, where it all goes. Love it
[00:32:44] Picks
[00:32:44] Jared: Alright, well, you want to move on to picks?
[00:32:47] Christian: Uh, yeah, let's do picks.
[00:32:49] Jared: Alright, so what pics do you have for us today,
[00:32:50] Christian: Oh, man. Um, so I've been, um, so of course I was, you know, super, super into Hades, this video game that I think everyone's kind of into, who likes roguelikes. And I, I somehow, uh, found this video game called Go Mecha Ball. It's like, A really, really indie sort of thing. There's no story whatsoever, but you're this cat that can roll up into a ball and slam into things, and you've got, like, guns.
[00:33:21] And you reload by rolling up into a ball and slamming into things. It's a whole, it's a whole situation, but, it's so high energy and so kind of, uh, it requires so much, uh, it's so, what's, for lack of a better word, action packed. I, I've been playing it on plane flights the entire time. I just, uh, I flew back from, from Berlin a couple weeks ago, and I played it on the entire flight for all seven hours straight.
[00:33:49] It was absolutely wonderful. Um, and kind of so mindless in a way because it's like the kind of roguelike where you just, you do it and then you play it again and you die and then you play it again. Uh, I don't know, for me it was good. Someone who needs a lot of stimulation. There's also this TV show that came out a couple years ago called The Great Which I've sort of obsessed with.
[00:34:11] It's loosely based on Catherine the Great, but it's absolutely ridiculous. It's, um, it's so irreverent and so bizarre, that I, I just, I, it's, it works for, for what I, for me, I guess, in terms of, It, it's one of the few things that's able to, like, catch me off guard and make me not actually believe what they're doing on the screen.
[00:34:32] So, I recommend that highly.
[00:34:34] There's always my, my favorite movie of all time is this movie called Tampopo, which I recommend too. It's a kind of a indie cult classic, maybe. It's about, um, set in Japan in the 80s, and it's about, uh, it's about food, and it's about these different ways of looking at food, and food and society, and it has a semi linear storyline, which is interesting, and it's shot like a western.
[00:34:54] It's silly, but also, uh, a bit of a A masterpiece at the same time. It's, I can't recommend it enough without revealing too much of it. it's like a western gangster movie about food. Uh, it's in Japan. It's so special.
[00:35:09] A huge source of inspiration for me.
[00:35:12] Jared: That sounds really cool. How do you spell Tampopo?
[00:35:14] Christian: T A M P O P O. It's called, uh, it means dandelion.
[00:35:19] Jared: Oh, beautiful. I'll have to add that to the show notes. As well as the other picks. All very cool. Well, I have a few picks, so sit back. My first pick is a game called Teardown. And it is a sandbox, voxel based game, um, kind of puzzle game as well. And , it's kind of mindless in a way. It's, it's got, these just beautiful graphics where you just kind of break things and explode things and they just, they break in wonderful ways and you can really interact with the environment.
[00:35:55] It does have some different, uh, uh, things that you can do that are a little more involved and there's races and just kind of these time based, uh, Things that you have to accomplish, but yeah, it's just kind of a game that's pretty easy to get into. For me, I'm not like a really heavy, you know, hardcore gamer.
[00:36:15] I'm like, put it on easy mode, and then if I can get halfway through it, then I'm like, alright, I'm good. I'll do it, you know, like, that's enough for me, but, um, so it's easy to get into, um, and I really like that.
[00:36:26] The next one is a musician Dan Bull. He is a kind of nerd rapper, like game type rapper.
[00:36:37] These suggestions are all because my kid, my 8 year old kid is, is, uh, is into this stuff and so then I ended up getting into it, um, but he's got this song called Satisfactory Night Fever, apparently it's about a game, but, uh, I, I like it, um, there's another one, I'm Heading Out, Out of My Mind. and then another one, Quiet Please, which is a warden rap, like a Minecraft, uh, warden rap.
[00:37:02] That's fun. Um, and then, the next one is a, another, it's a band, uh, called Glass Animals. And particularly, I, I recommend this because, um, as I, uh, try to kind of, you know, Relate things to the guest. I think the, particularly the Dreamland album, um, kind of reminds me of Charm and of the kind of vibe of, of you here and Christian and, um, kind of thinking about design.
[00:37:30] It's kind of weird here, but I see like, I'm looking at your background is very purple and then you have this like kind of like brown in the, in the foreground and like I'm wearing this purple shirt and then I have brown in the, in the background. I don't know why that just kind of like, there's like this, uh, it's like a yin yang kind of, uh, symbolism going on
[00:37:50] Christian: Your background is light, my background is dark. Dark mode, light mode.
[00:37:52] Jared: Yeah.
[00:37:55] Christian: I only use light mode, by the way. Cannot use dark, at least in the daytime. Cannot use dark mode in the daytime. It's too sad.
[00:38:00] Jared: Yeah, I used to use dark mode for everything. I thought, you know, that, that's, that was just like the hardcore way to do it. And then I was just kind of like, I'm getting older, I guess, or something. And I was just like, Hmm, let me try not making my eyes work more. And it was a good choice.
[00:38:17] Christian: I have one more pick, actually,
[00:38:18] Jared: Oh, okay. Sorry.
[00:38:19] Christian: But no, no, if it's okay, I
[00:38:21] Jared: Yeah, of course.
[00:38:22] Christian: I got this foldable bike, this Brompton bike that I'm completely obsessed with. My son got a bike, and so I was like, well, I'm gonna get a bike, and, and then I, I, I was like, well, bikes always get stolen in New York City, so maybe I'll get like a folding bike.
[00:38:37] So I went and got this, like, little dorky folding English bike, and it's the best thing I've purchased in like, I don't know, since buying a home or something. It's, uh, it's just, I'm absolutely obsessed. I take it to restaurants. I take it to nice restaurants. I like, it never gets stolen. I use it as a shopping cart, um, I, I cannot, uh, it, it never gets, yeah, I don't know, it's like 17 pounds, I like shred the city bikes, the electric city bikes, like shred the hills, it's been the best, best thing to happen to me since, , yeah, I guess, I don't know, having a kid and writing Elm.
[00:39:15] Jared: Right on. That sounds really cool. Uh, what's the brand of it? Brampton?
[00:39:21] Christian: Brompton.
[00:39:22] Jared: Brompton.
[00:39:23] Christian: Yep.
[00:39:23] Jared: Okay. Cool. Yeah. Well, that's, that's kind of perfect. That leads me into another pick that I have. Did you have anything else
[00:39:30] Christian: No, no, I'm all out of picks, I think.
[00:39:33] Jared: All right. Well, that's, that's actually perfect because I have this book recommendation called Bicycle Diaries.
[00:39:38] It's by David Byrne, , the, uh, lead singer of Talking Heads. And He, writes in this book about, he's based out of New York City. And, some of it's about riding bikes in New York City. So I think that, you know, fits very well, but he also has this folding bike, believe it or not, that he, uh, brings, uh, when he, you know, goes to play in different, uh, Cities around the world.
[00:40:04] So he has like, there'll be a chapter about, you know, like, I don't know, just different cities. I'm trying to think of one. It's been a while since I read it. He has like, Istanbul, Buenos Aires, San Francisco, London. So like, he talks about what the experience is like from the perspective of someone riding a bike versus someone who is in a car.
[00:40:25] And talks about how the urban landscape, how the design or lack of design. shapes how people interact with an area and kind of how it shapes the culture. And it's just a very fun book. It's not like, you know, it's not too deep. It's, it's, uh, I don't know, it's kind of gripping, but yeah, if you're definitely, if you're into bikes or especially folding bikes, you might want to check that out.
[00:40:51] Um,
[00:40:52] Christian: funny, here in Brooklyn there's all these, there are all these public bike racks designed by David Byrne. Uh, which, which makes sense now.
[00:41:00] Jared: Okay. So what, what's the design? What makes it?
[00:41:05] Christian: Uh, I want to say they're words. They're words that you can, you know, Like, there's these metallic letters, basically, that spell things that you can clamp your bike onto. I think they, if I recall, they say, they say things that regard, with regard to biking, although I could be wrong about that. It's been a while since I've, since I've read one, but I see them all the time.
[00:41:27] Jared: Right on. Yeah. I'm going to have to go look that up now.
[00:41:30] Christian: Yeah.
[00:41:30] Jared: I didn't know about that. Cool. Wow. Lots of connections here. Very cool. Okay. Well, I guess that's it. So thanks for,
[00:41:38] Christian: for having me.
[00:41:39] Jared: yeah, thanks for coming. Uh, thanks for everybody who's out there listening and, uh, please rate and share if you're enjoying the show and thanks Christian for coming to Elm Town.
[00:41:48] Christian: Thank you.