Twitter Logo

Amos King

Twitter Logo

 Chris Keathley

 

The Elixir Outlaws now have a Patreon. If you’re enjoying the show then please consider throwing a few bucks our way to help us pay for the costs for the show.

Episode Transcript

 

Amos: Welcome to Elixir Outlaws, the hallway track of the Elixir community.

Chris: Hi Amos.

Amos: Hi, how are you?

Chris: Oh, I'm, I'm sick. You're gonna have to drive on this one.

Amos: I gotta drive on this one.

Chris: My whole family was sick and I was like, my immune system can take it. What doesn't, what, what I will only, that I will be remade stronger.

Amos: Watch me lick the inside of this trash can. I'll be fine.

Chris: And then I, then I got sick.

Amos: I'm sorry. So you're are you currently sick?

Chris: Yeah. Yes. Yes. I'm currently sick.

Amos: I'm fighting allergies, but not sick

Chris: So my voice is a little bit, not all there. So you're going to have to do the talky talky parts of, of this podcast.

Amos: Okay.

Chris: I know you're not used to this. I know that we've done nothing to prepare you for this.

Amos: I know I'm, I'm, I'm totally lost. So, uh, so I'll just tell you what I'm doing tonight. Uh, cause I think that, uh, you might find it interesting given your background, uh, I'm going to a talk. If you come, when you come up to visit family, I need to take you to this place with the talks. It's called Linda Hall Library and it's a science research library, but they have talks all the time. Um, and I'm taking my kids to one tonight with, uh, uh, I think Levy's the guy's last name. I can't remember his first name, but he's, he he's discovered like 23 comets and it's, uh, an astronomy talk, but, um, I'm pretty excited.

Chris: That's awesome.

Amos: With your like space loving background, actually you have a rocket loving background don't you?

Chris: Little of both. Fascinated by all aspects of it.

Amos: My, my youngest daughter is really fascinated by space. Um, and um, we joined the astronomy society and I asked her the other day, cause you know, they're talking about sending people to the moon again, in like 2024, like they're planning on having people stay on the moon for long lengths of time. And I asked her, I said, so when you get older, are you going to go to the moon? And she goes, no. I mean maybe to get some fast food on my way to Mars.

Chris: Yeah, dream bigger, Dad.

Amos: I was like, I was like, you're awesome.

Chris: Dream bigger.

Amos: And she's into programming. So that excites me.

Chris: That's awesome.

Amos: Uh, I actually got, um, Structured Interpretation of Computer Programs and then I bought the teacher's guide to it also. Mm. And I think that, I think I'm going to try to work through that with her.

Chris: The book is amazing.

Amos: Yeah, it is. And I, and I think it, I think it's approachable and I also just finished rereading The Little Schemer to try to decide whether I thought that would work for her and I, that, that's a pretty good intro too. I like the way that's written. Have you ever read-

Chris: Yeah, no, no, no. I've read. Well, I read through it. I will say that The Little Schemer and those books of that ilk, like, like books like that, follow that sort of like Socratic question, answer style. The little x, like the little, whatever. I've read a bunch of those. Those don't hit me very well. Like those don't, those aren't super appealing to me. Like I get why certain people like those, but they don't, I don't dig em.

Amos: I that's the only, I've only read that one. Um, and I don't know. I just liked that it's different,

Chris: Well it's definitely different. It's definitely weird.

Amos: Um, it's like a novelty the first time I read it, it was really hard for me to follow because of that, the way that they were doing it, it killed my brain. And the second time it was a lot better.

Chris: Yeah. Maybe cause you're kind of expecting it at that point, right?

Amos: Yeah, I guess so.

Chris: I've actually been recently going back through SICP, through certain chapters of SICP and it's just, it's always astounding to me that that book accomplishes what it accomplishes in the amount of code and the amount of like text. Like that's not a huge book, all things considered. Right. But it's just jam packed with like these really important, hard to grasp concepts that they just sort of like it just do it like as an undergrad, you could do all this stuff. Like that's amazing to me.

Amos: Yeah. Uh, I don't know. That's, that's what it is for me too. Cause I, I know I have a degree in computer science, right. And that's what I went to college for. And when I read that book, I feel like crap, I took the wrong computer science degree because that they like, and, and it even says you can, like the book talks about you can go through it in one semester and it's like

Chris: I believe it, I believe it!

Amos: It's like, that's awesome. Um, we might, we might have to have to pause for a little bit. I got the sprinkler people here to blow out my sprinklers since we freeze here.

Chris: Oh, right. Yeah. You got to winterize.

Amos: We got to winterize, I forgot that was going to happen right in the middle of this. Oh well,

Chris: But yeah, I, when I'm, I'm endeavoring to build a, um, I thought it would be fun. I was inspired after Dave's Gig City talk. I mean, he talked a lot about Prolog. And he talked about data log and these kinds of things. And I was inspired to, um, sort of revisit a lot of that stuff. And so I ended up I've been work- So the, one of the sections in SICP as you may or may not know, is you build a Prolog interpreter and um, he talks a lot about like how they do unification and how they manage, uh, looking stuff up in the database and all this kind of stuff. Uh, and, um, I've been working through that and building and reimplementing that in Elixir just for fun, because I feel like I want to make it approachable to people and people to see like the power of it without having to like, do Prolog, like learn Prolog.

Amos: Are you going to send me a link to this repo?

Chris: When it's done!

Amos: I want to, I want to watch the sausage being made

Chris: No, you really don't.

Amos: I do. And then I want to read the chapter about that along with watching the sausage being made.

Chris: It's very different. I mean, part of it's like it's, it's way less terse. Like it's so much easier. It's so much more accessible in SICP just because of the nature of Lisp and the nature of Scheme.

Amos: Yeah.

Chris: So it's a lot easier to sort of like, just do stuff . It's like semantically it makes more sense in scheme the way they've structured it. So there's a lot more syntax nonsense that has to go into doing it and Elixir, but that's okay.

Amos: Yeah. Yeah. I, so the one thing that kills me in, in looking through like The Little Schemer and that book is, um, even in, when I, when I've programmed in Lisp is like just the number braces. Like you cannot program in that language without rainbow braces on, or I can't. Uh, and it, I just, it just it's rough on me. Just trying to turn to parse all that. It's really hard in those books when they're black and white and I'm trying to parse it. So a lot of times I just type it out so that I can actually look at it because my, my mind, I guess I'm spoiled by editors that have color.

Chris: Sure. Yeah.

Amos: Cause my mind just can't see that on the paper very well when they start getting into really deep stuff. Uh, but like in The Little Schemer, when they implement Y Combinator, I tried to look at it over and over and over. And finally I just went and typed into my editor. And now that I'm thinking about it, I should just read the book with colored pencils there and then I can color my own

Chris: Color in the perims.

Amos: Yeah. Yeah. But I do find myself counting. I'm like 1, 2, 3, 4, 3, 4, 3, 2, 1. That's how I count pairs, like, up and down, till I get back to zero.

Chris: I mean, they have, there is stuff out there like par edit and those sorts of things. Yeah. Those exist.

Amos: Well, I use them, but it doesn't help me when I'm staring at the book.

Chris: See I don't like par edit.

Amos: It doesn't help me when I'm staring at a book.

Chris: Yeah, I mean, I understand that for sure.

Amos: Well, I just use a lot of the Emacs plugins for it and that's good enough for me.

Chris: The nice thing about Emacs is there's sort of -Emacs is a journey, but the really good part is that there's journeys within journeys it's journeys the whole way down. You have to learn how par edit it works. You got to learn org mode, which is like learning Emacc again, it's like an Emacs in the Emacs.

Amos: I, I have the org mode stuff up on my computer cause I've never actually used org mode. And I'm like, I've got to learn org mode. And then I saw that there's like a 300 page book on org mode. And it’s like what?

Chris: I feel like if you're not using org mode, what's even the point of using Emacs.

Amos: Yeah. So, so actually I started in college using Emacs, uh, when I was a freshmen and about the middle of my second semester, I switched to Vim because it was like, hey, you can check your email in Emacs. And then it was like, hey, you can do this, in Emacs. And after a while I found out you can play snake and minesweeper in Emacs. And then I just quit working. I was like, I'll just pull up snake, play some snake for a little bit. And so I had to get out of Emacs and I switched over to Vim because you basically, because you couldn't do as much stuff in it. It was less distracting to me. But now, now I'm back on the Emacs train. Well, I'm using spacemacs anyway.

Chris: Yeah. You're using some other thing.

Amos: Yeah. It's like almost, almost Emacs, almost Vim.

Chris: That's like a journey outside the journey. That's a journey to get to the journey.

Amos: Well, it's just an Emacs configuration, right?

Chris: Yeah. It's just, just an Emacs configuration.

Amos: That redoes everything.

Chris: Right.

Amos: Speaking of stuff-

Chris: That's like saying that we just went to the moon. Sort of downplays a little bit of the other details that went into it.

Amos: Okay. Fair enough. Fair enough. Uh, so, so what else what's, what's going on in the, uh, Elixir world for you other than, so you're writing, you're writing the, uh, Prolog interpreter.

Chris: Yeah. Just for fun. Just, well, in reality, what I actually want to get down to as a data log interpreter. So I pulled down all my database books and was going through different data, loggy stuff. Like I'm aware-

Amos: Take that Clojure.

Chris: Well, it's all the same books. Like it's all, it all comes from the same, same, same body of work. Um, yeah. I pulled down a bunch of the database books and was going through data log, but actually there's a bunch of chapters on data log and a couple of them that I have. Um, they're very old.

Amos: Which database books?

Chris: Um, uh, I really like The Principles of Database and Knowledge-Based Systems. It's volume one and volume two. Um, like Ullman is the reference on that. And they're good.

Amos: So, they're so they're picking up?

Chris: I mean they're cheap typically you can find them used. They're old.

Amos: I like that.

Chris: Yeah. But I mean, I don't know. If you don't really, they are very specific read. Like, I mean, I don't know that like they're like a must have, but I enjoy them. There's probably better database books out there, but I think there's a lot of this stuff that's, that's really useful. But in any case, like I'm familiar with the words magic sets, but I don't know how it's implemented or what it does. That's as far as I've gotten. So I figured I would start with SICP, build Prolog Cause I mean, Prolog's just datalog with extra steps, right. Just does more. So, you know, you just back it off a little bit, and then you got yourself a datalog,

Amos: Just turn the, turn the amp down to 10 instead of 11, right? Yeah. I, uh, so I was, I was just thinking when you were talking about those books, I wonder if I can get them from the library, but you have turned me into a margin writer and the library generally frowns upon you writing in their books.

Chris: Yeah I would suspect so.

Amos: So, so what you can do, I've found, is that you can get these, uh, friction pins from BIC and they erase with heat.

Chris: Ooooh! I think everything erases with heat eventually.

Amos: Yeah. But these, these are erased very quickly with heat, not fire, just heat.

Chris: I mean, I'm just saying like, if you get enough heat on it, you can erase just about anything.

Amos: That's true.

Chris: So, fingerprints.

Amos: I'm thinking, as long as it's summertime.

Chris: Entire buildings.

Amos: I can get- People you don't like

Chris: All of the state of California at this point.

Amos: That's pretty sad, but true. Every year I'm like, are people finally gonna realize that they live in a fiery desert and move or are they going to continue to stay there? So these, these pens, I think that I'm just going to get books from the library in the summertime and then I can write all over them. And then I just leave them in the back of my car one day parked in a parking lot. Cause I actually had a notebook full of notes one time with one of these pens.

Chris: Caught on fire?

Amos: Erased, erased in the sunlight in the back of my car in the summer. I pulled it out and it was like partially in the shade and half of the notebook, like right across the center of the notebook was gone.

Chris: I'm not sure if that's a feature or a bug.

Amos: It was really sad.

Chris: It seems like a could go either way on that one.

Amos: Um, so, so me this week I've been, I've been working on, uh, doing some, some GenStage Broadway stuff. Uh, I really like what Broadway's brought me to GenStage. Like there's a lot of stuff that I just don't have to deal with myself anymore. Um, but I feel like I could pipeline long chains simple in GenStage. Cause I feel like I'm not sure if there's a way to like hook up to Broadway things like make one Broadway piece, uh, uh, uh, per consumer producer. I'm not sure. Um, I don't think that I can, I haven't figured that out yet. I was hoping you knew, but you're shaking your head. Like I got no nothing.

Chris: No I don't, um, I'm not, I don't really know anything about Broadway. I mean, I know people like Hamilton, but I don't even know really about like off-Broadway stuff. Um, um, I saw Wicked once in Chicago, that's about as close as that's about the, my only, the extent of my understanding about Broadway. And I have no idea how it plugs into GenStage.

Amos: Wicked is a pretty good Broadway show though.

Chris: No, it's good. Yeah.

Amos: Yeah. I saw that-

Chris: Didn't see it with the original cast, you know.

Amos: Fox Theater in St. Louis.

Chris: Yeah. Well, uh, in any case, I uh.

Amos: I feel like I need to explain your joke.

Chris: Thanks. Appreciate that. So in any case, I don't know. I find that like I was talking to Connor about this too. Like I keep searching for the GenStage shaped problem and whenever I find one, it's always, it always tends to be like, just tends to be-what's the right way to say it? I feel like my problem is always so specific that I understand how I would do it and then I just do it. And so the, the, the small amount of, I don't really run into that many GenStage shaped problems that often. And when I do, I don't end up using it just because I already have sort of an idea of how to use it and like how I would solve my problem on my own. And I don't know that that's like maybe the right approach. And that's not really meant as like a slag on GenStage. I think GenStage is good, but I do have this perennial problem where it's like, I cannot find, I feel like I stumble upon so many problems where I'm like, I could probably use GenStage for this. And then I just don't. And I don't really under, I mean, I don't really have any use case for Broadway because I don't like we don't use Rabbit. Like, and it, and like, that's like kind of an or SQS, like, I mean, I think probably SQS is used somewhere in our, in our organization, but like, I don't. We interact with Kafka all the time and it seems like Broadway semantics don't play with Kafka right now. And that might be changing. I'm not sure, but when I've looked at it and there's no like mainline support for Kafka with Broadway,

Amos: No, but there's a, there's an off-Broadway library, I think for Kafka, from what I remember.

Chris: Yeah. It's the same people who, it's the same group who, who worked on like Elsa and these other Kafka adapters and stuff like that. Like, they're doing good work. And, but like, I think, when I talked to them, they were still kind of discussing it with the Broadway team. Like here's the things we would have to support to really do this and with Kafka.

Amos: So I'm, I'm using mine not with any of those. Uh, I have, I have cameras, a bunch of them like, uh, like, like security cameras and I'm getting streams of images from those securities, in JPEGs, is what I'm getting. Um, and I have all of them coming in and I need to batch them up at certain in certain ways, which is where Broadway made things easy. Um, um, and then I also, the resources that, uh, I'm using to I, to process those images are on a GPU. So I can really only do one thing at a time. Um, so then I made, I made just a GenServer for that through called it GPU and let it call out to the GPU since it'll only do one job at a time. Um-

Chris: Gotcha.

Amos: And, and then I have like some web services that I have to send all this stuff off to. So it's like a lot of back and forth. I'm really doing a chain of things. And at different levels, I have different amounts of batching going on. Like some of them might need six images, so may need 2, some may need 12, so I have to do it in a certain way and track it all the way through. And so I felt like that was a good GenStage problem. Um, I could be wrong, but I'm trying to,

Chris: I mean, I think that's, I think that's right. I mean, like that seems right. And it, it gives you the ability to do load shedding and all this kind of stuff too. Like, I mean, it seems like it does all the things that you want.

Amos: Right. And well, and that's what I'm looking at. Like everybody I talked to, like you, you're saying, you know, we're, we're not using S3 or, or, or these different messaging cues. And, and so everybody I talked to is like, oh, I haven't looked into it cause I'm not using messaging cues. And I'm like, well, I'm not really either. I'm using a camera stream and doing the same thing. So, but, but I felt like that's doing what I need it to do, because if I get behind on processing these images from the cameras, I do need to load shed, and I do need to throw stuff away, but I also need the GPU asking for its work. Like I need it to, to only get hit. I don't want things to pile up on top of that GPU. Cause then I can't loadshed those.

Chris: Yeah. That makes sense to me. I mean, I think that's, I think that's the right use case for it. And part of it's that I've never taken the time to really dig into it. And I feel like the docs, um, I don't, I feel like whenever I look at the docs for GenStage, I have more questions than answers.

Amos: Uh, I feel that way too, as I've been going-

Chris: I'm sick, that's coming. This is, uh, this is a, this is, this is the most salty I've been in a while. I don't really mean to be. But I definitely come away with like, I'm like, how in the hell does this work? Like what, like, how do I pull all this crap together?

Amos: I don't think you're being salty. Like I am I'm.

Chris: Um, little bit.

Amos: I'm in the same boat, like working through it right now.

Chris: I mean, it's like an amount of salt that would like season a good soup, but it's not like you could cure meat with this amount of salt. You couldn't salt roads.

Amos: Okay. Just a little bit then. All right. Well, I, I, I feel the same way about the documentation and I'm sitting here going through it and trying to think every time I figure my way past how to, how to configure it, or what's going on behind the scenes. Like I did go read some of the code because I was so lost. And then I'm like, okay, I don't really know how to improve this documentation. And I think some of the wording for me in Broadway confused me, like they talk about stages. And I, I looked at stages as like steps. You know, you go from one stage to the next stage, the next stage. But it looks like to me, stages are really like the number of things processing some piece of data, like how many can you be going at the same time? And, and so, but in my mind, I was thinking of a completely different, um, definition of stage. And so that made reading that documentation rather difficult at first. So I may, maybe that's it, maybe the documentation would do well to have some definitions. Or make it more clear.

Chris: Yeah. And I think, I think that, that stuff's probably in there somewhere, but I just don't, I don't know that I understand it. You know what I mean? Like, and I think it's just one of those things that like, um, you have to kind of get into it and look at it and read it and then really decide, like, I don't know, you have to, you have to probably look at a lot of the code and understand how it's all put together and then you probably have to go look at like how other people have implemented this stuff to really, to really figure it out. Like that's probably also part of it.

Amos: Yeah. Yeah.

Chris: You know. Look at how like Flo uses GenStage and look at how, you know, whatever Broadway, like the Broadway Rabbit adapter uses GenStage and all that kind of stuff.

Amos: Yep. Yeah. I think that's a good place to start also. Um, blogs, one of the w really good one, uh, Samuel Mullin friend of the show, uh, wrote a blog post on, on Broadway that, um, this is really good. His blog posts are always really they're long, so be prepared, but he, he, uh, I've talked to him about him and he, he really researches something really deeply before he starts writing and then like kind of how he gets his own thoughts out and he just writes prolifically about it. So, yeah, it was a good post that helped me a lot.

Chris: Yeah. I need to go back and reread a lot of that kind of stuff. There's definitely a lot of information out there. There's been much talks on it and those sorts of things. I just, uh, yeah, I've never really internalized it to the, to the degree that I, I should in order to utilize it as a, as a, in order to utilize that tool correctly.

Amos: Well, you got, you got to find the right problem to try it on. That is interesting enough to you to keep you going. I think. And that's why the camera thing, whenever I started working on it, that popped into my head was, maybe this is it. So I thought I'd jump in and try it. Um, it's nice. Nice to spread my OTP wings a little more too.

Chris: Yeah. Uh, well, what do you mean spread your OTP wings? What does that even mean? I don't understand that metaphor.

Amos: I mean, there's just a, there's a lot of, uh, development that ends up happening in an Elixir that you're not really ever directly dealing-you're not dealing with processes talking to each other and things like that directly, especially if you're, you're doing like web development with Phoenix, you could do a whole lot and never touch OTP. So a lot of the- that you notice, right. And so a lot of the work that I do where you're not dealing with multiple processes at all, right. Um,

Chris: Someone else is managing it for you.

Amos: Right. And so it's, it's nice to get back in there and do that. I, that's why I really liked a lot of Nerves development is because I was doing a lot of OTP stuff. Um, because nobody's doing that for you on an embedded system. There's, there's not a lot of libraries out there handling things like Phoenix does, so you actually have to have to get in there and do all that. And so it's nice to do that somewhere again. Cause my last few have not been, have not needed so much the OTP.

Chris: Right. You really, yeah. You're really just using, you know, you're, you're using like you're using the stuff that uses that stuff. Um, which is fine. Like, I mean that's, if you know, that's, that stuff is good stuff, you should use it. Um, but it also feels good to go back and use the stuff yourself.

Amos: Yeah. Well, and I feel like, I don't know. I feel like I'm solving bigger problems whenever I'm doing that, uh, or more and more exciting problems to me.

Chris: Well, I feel like it's, I feel it we've talked about this before I think, but like I have this pet theory that that's why people end up, you know, I would say like almost misusing, um, OTP in certain places, but they process for everything .

Amos: Cause they just want to.

Chris: Its cause you learn, well, cause you learn about all this stuff and it's like, this is cool. This is this mind-bending new way to think about code or not even mind bending, but just like, this is how I always wanted to write OO, and this is, OO and you know, the correct version of OO or whatever. And um, and so then you, but like all the problems kind of have been solved for you. Like, you know, these other libraries that you're probably using are all using processes and all using these different things and are doing a good job. And so you don't really have to go solve that and then what's left for you to solve well, it's your business problems. It's all your business entities. And that's what leads people to this place where they're like, well, I want to use processes somewhere. These are cool. What else, why else am I doing Elixir, if not for these cool process things?

Amos: So I, so I create a user GenServer that acts as an object.

Chris: Yeah. Exactly. I think that's where a lot of that comes from. That's my, that's my, like, I don't know, like pet theory about where that comes from.

Amos: I mean, I don't think it's, it's terrible, um, to play around, you know, and, and do that stuff a little bit, uh, because I think in playing is where you learn the, the, the good and bad places to use it. Um, and hopefully you're not doing that on a big production system, but sometimes that happens too. Yeah. I mean, we're all, we're all learning every day on our jobs. So

Chris: I mean, I, yeah, yeah. Finding the right times to do that, to like play around with stuff or try things out is hard, like finding the right places to do it and knowing when to like throw away bad ideas and that kind of stuff, that can be tricky.

Amos: Yeah. And I find that there are a lot of good ideas that partway through implementing I start to feel like they're not that great.

Chris: I think that's probably, I mean, I think that's probably a fairly, a little bit universal

Amos: Usually when I'm frustrated. Like this camera thing, I actually, I started to implement it with GenStage and then GenStage and Broadway. And then I ripped all of that out and did it again with just some, some GenServers and supervisors. And I was doing, doing, uh, just some really basic I tried streams, um, which actually streams worked really well for this until I wanted to, um, supervise and restart, uh, with camera connections, if they failed. And then it was like, nope, we're done. And I needed them all to stream together. Like I need like-

Chris: You needed all the streams together?

Amos: Yeah. Like if I had six cameras, I needed an image from each camera was my first batch. And so then I zipped all the streams together. Well then when one of the cameras failed, the whole thing stopped. And then I had to manage that failure because it didn't actually close sockets. It just like hid it in the background. And so it, it got to a point where it was like, okay, streams aren't right. And then I went back to Broadway and was like, I and GenStage. And I think I was like, well, yeah, I think this actually is the right approach, but it just felt wrong at the beginning. And I think it was my own lack of knowledge.

Chris: Yeah. I think it's, it's often lack of knowledge, like when we're doing that kind of stuff, like if a, if an API or like something doesn't feel right that we're trying to utilize, there's like a real disconnect, especially on something where you're like, I know that this is like good. Like people use this and like it, so what's wrong with me. Like why? And I think that's like, that adds a lot to that feeling of like, you must be the one doing it wrong. And that ends up that that ends up like kind of like polluting my thinking a lot of times where I'm like, I know that this should be, I know that should be able to do this. And I'm confused as to why I cannot. And then that leads to frustration. Cause you're like, this doesn't make any sense. Like it should work. I know that it has to be able to do this, but what do I need to do to make it do it? And, uh, that, that often leads to like frustration.

Amos: And how do you, how do you work through that?

Chris: Just get over it. Or I rage quit and I just build it myself. That happens a lot. Just being honest.

Amos: It's a regular thing for you.

Chris: Yeah.

Amos: Uh, I, I walk away for long periods of time.

Chris: Yeah. Same.

Amos: Unless-

Amos: The long period of time might be years. Might be infinity.

Amos: It's actually easier for me to do this stuff on like a full-time work thing. If it, if it's at work, then I, then I work through it a whole lot better than if it's like the side project. Because the side project becomes a, I just like, like there's no, there's not as much motivation, I feel like to get it done, uh, and on the side projects, I'm like, I really want this to be perfect and right. Because nobody else is working on this but me and so I don't have anybody else to lean on their ideas or anything like that on a lot of that stuff.

Chris: Yeah. I think that's, that's really tricky. Especially if you don't have a clear vision of what you're, what it is you're creating, you kind of need, you kind of need that other person to help push you in the right direction.

Amos: You see, like right now I have, I have a starting point and I have an ending point. And my, my vision of everything that gets me from the starting point to the ending point is, is the part that's lost on me. Ooh. That looked like toast. Was that toast?

Chris: Yes. I'm eating toast.

Amos: I like toast. I haven't had toast in a long time. Anyway. Sorry. I got sidetracked by your food.

Chris: Oh, I'm sorry I'm so tired. I'm so bored.

Amos: Its ok. Uh, ma maybe we should cut it here. I've got sprinkler guy here and I kind of want to see what he's doing so that I can learn how to do it, it'd be nice to do this myself.

Chris: The sprinkler man! The sprinkler man!

Amos: The sprinkler man!

Chris: The worst Batman villain ever.

Amos: *makes sprinkler noises* I can only shoot when I'm going left.

Chris: It's me Batman! The Sprinkler! He only comes out when it's, uh, what is just barely raining. And he, and he, uh, he, he only really threatens the golf courses. We're going to take this par three and make it a par five. The big water trap in the middle.

Amos: Oh man.

Chris: The Sprinkler!

Amos: I can't even function. I think that's a perfect place to end it. Let's just cut it there. All right. Sounds good later. Bye.