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.

Amos: Alright!

Chris: First clap of 2020.

Amos: If there was a synchronized clapping competition, we would be really good.

Chris: Yeah, there probably is

Amos: True.

Chris: There's like tag competitions.

Amos: Seriously?

Chris: Yeah. Have you not seen this.

Amos: No, I have not. I would imagine it’s such a failure.

Chris: It's like some sort of weird combination of Ninja Warrior and well and, tag. And the titular game tag.

Amos: Whoa! It sounds like it would be fun to watch though.

Chris: It's very fun to watch. It's sort of like free running. They like dive around through this like obstacle course type situation.

Amos: Parkour tag?

Chris: Yeah. Yeah. It's very cool. It's very, very cool. But it adds a very like Ultimate Frisbee vibe to it, which is to say it's these people who are very athletic, very like, like these are some of the best athletes doing some of the most athletic things you'll ever see playing the most ridiculous stupid game. And I say this as someone who loves Ultimate Frisbee, ok. I love Ultimate Frisbee, but it's a stupid game. You actually look at the rules. You're like this game was clearly invented by people who like were on, uh, on some sort of substances

Amos: Coming into 2020, trying to make people mad. Step one. Uh, no, I, I haven't played Ultimate Frisbee since, uh, once, maybe since college.

Chris: Yeah. Well that seems appropriate. That's the time when you're required to play Ultimate Frisbee, you, there there's, there's many things, there's many formative experiences in college. Like you can, you know, you'll, you'll probably like learn about and listen to Godspeed You! Black Emperor and uh, you'll play some Ultimate Frisbee and realize you like it. And, um, that's about it really you'll oversleep and, uh, and just never go to bed before midnight.

Amos: Well unless you move into the Frisbee golf from Ultimate Frisbee. That's like the next step,

Chris: Right? The next, yeah.

Amos: Yeah. Mo most of those people that moved into that in college though, didn't seem to graduate. Not all of them, not all. I might be stereotyping a little bit.

Chris: Maybe. That's okay. That's, that's uh, this is just new year, new you. New year, new you. You can be who you want to be.

Amos: Can we start this year over then?

Chris: Really? We're only two days in,

Amos: Well I know, but

Chris: How'd you screw up so badly within two days?

Amos: Well, I don't know. Maybe I've done better. I will, you know, I was just stereotyping people and you said new year, new you, I don't want to be, I don't want to be someone who stereotypes people.

Chris: Hmm. Well, you have all year to change it.

Amos: And that's true. That's true. I have, like you, though, have not been on a certain website that touts itself to provide information and in the community.

Chris: Yeah. Keep it, you should keep that going. That seems like a good thing to keep going.

Amos: Yeah. The site that shall not be named.

Chris: I don't want to talk about it. Cause last time you, last time you brought it up, I got yelled at, so I don't want to be involved. You and you and you and your, and your, and your drama and your flying monkeys fly in here. And they cause problems for me. And I don't want any part of it.

Amos: Alright. Alright.

Chris: Alright. I will not, I will not be party to this. I'll wash my hands of it. Get behind me, Satan, get behind me,

Amos: Uh, that, that never gets old. So what do you have going on in your, in your Elixir two days so far or, or, yeah, yeah.

Chris: Um, nothing yet. Uh, we push out over the break. Um, we pushed out, um, probably the last major feature. I think we're still going to get, we're still going to tweak some stuff. Um, it was probably the last major feature of Norm, which is to add contracts.

Amos: Norm is done?

Chris: Well, no, it's not done. There's going to be some improvements. But I think like on balance, it's done. Like the bulk of all of the stuff is there. And then now it's refinement, but we added contracts. So you can add annotations to your functions, like contract annotations to your functions, which are basically look like specs. They look like specs except you can use your norm specifications. And then they check both that you're passing the right data into the function and they check that the functions returning the right stuff

Amos: At runtime.

Chris: Right at runtime.

Amos: Yes. Is there any compile time checks in norm?

Chris: No, not by default. No. I mean, not right now. Norm is built such that you could build those things. You could build compile time checking, but it doesn't do it for you automatically. And, uh, that's left as an exercise to the reader. Like if you want that, then you could certainly build compile time stuff. Like the bits are all there that you need to build it at to, to check things at compile time. If you want to do that.

Amos: I know that I was talking to you on, on a chat the other day and you currently support stream data, right, for generating data. And are there, there's still plans to maybe support prop check?

Chris: Yeah. Yeah. We'll, we'll end up supporting propcheck but these are the sorts of things that I think like our improvements over the, over the long-term, it's like we'll support different generation backends propcheck being one of them. And we'll support, like I'm going to, the next major thing I'm working on is, uh, is error messaging is improving all the error messages, um, pretty, pretty dramatically improving all the error messages.

Amos: Nice.

Chris: Um, so it'll be very clear what's wrong and why, and all this kinds of stuff. Um, when you pass this, pass this state around. And I can't take any credit for the contract stuff, it was something that I wanted to have, but I'm Wotjek did all that work and is, and is still continuing to work on it. And so, um, it's been awesome to have him involved in the project just to bounce ideas off of, and talk to about things. He's been an amazing collaborator and he's way better at Elixir than I am. So it's, it's, it's, it's nice to turn over some of the hard problems and be like, I'm excited that you want to do that because I don't even know how. I'm not ready to start that. So it's been great.

Amos: Cool. So supporting, um, supporting prop check what's the, is there like any major hurdle that needs to be overcome to do that?

Chris: No, you just gotta do it. It's just gotta be done. And then other than that, it's just like, you need to implement a protocol and that's it for the different types of checks that we can perform. Otherwise that'd be basically about it. And then, uh, and then it'll be done, but it's just, it's just a matter of doing it. And right now it just hasn't, it's not on the top of the pile.

Amos: Sweet.

Chris: So, but yeah, but that's exciting. So that's kind of the only real, that's really the only thing I did at all over the break. And it's the only thing I've kind of worked on recently, so that's, but that's cool. It's, I mean, it's exciting to see that library, it's exciting to see that library kind of nearing it's what, like, it's already really useful and it's already really close to like what I want, but it's nice to see it getting these refinements and that kind of stuff, because it's just becoming more and more useful. And that's really exciting because I really do think it's like, I think it's pretty, I don't know. It's just pretty good. Look, it's really, it's just everything I've, I've wanted it- everything is, everything I've wanted it to do it's been able to do. And that's really exciting because it's actually really been helpful, uh, in a way that in, in so many ways that like, I didn't expect it to be helpful. Um, and it's been really, really useful for that for just like adding it into different, you know, services and libraries that we maintain. It's been nice. It's made, it's crept into literally every one of my open source libraries, I think at this point just because it's like, it's like, I really need to validate this. Oh, I'll just use that. And it's like, even in it, so it's just popped up in places that like, I didn't, you know, anticipate off the top of my head.

Amos: So the sweet spot, do you feel like it's the edges of your, your code or do you use it all the way through the stack?

Chris: I use it everywhere. I use it actually everywhere. Yeah. I use it everywhere. I use it at the edges when you want to conform values that are coming back from like some API. And I use it to like check that the arguments are passing to a GenServer are correct. So it's, it's like I use it all over the place and um, I think that's going to become even easier. That's gonna become even more ergonomic with the new contract stuff that's out now because it's just an annotation. So it's really easy to define the, you know, the options that you want to pass in or the keyword list you want to pass in. And I think that's gonna make that even easier, but yeah.

Amos: Have you thought about writing it in Rust?

Chris: Uh, I have. I’ve considered rewriting it in Rust because that would make it better. Uh, I can only imagine it would make it better. Let's see the Rust community is great because eventually we'll have rewritten all of those old Unix tools into Rust. And then that'll be great because apparently that's the, you know, say what you will about Go. And I have said a lot of things about Go, but they're at least building real things in it, right? Like they're building like Kubernetes and etc and uh, you know, uh, like all of the Hashi Corp stuff is written in Go. It's like, like people really actually write real code that's used by thousands of people and fricking Rust, like the best thing they've come up with to do with that language is like write replacements for already existing working tools. Good job gang. Good job. Really glad we took this like brilliant type algebra and now we're using it to rewrite said because that's the thing that needed to be rewritten. That's the thing that just really hasn't stood the test of time is said.

Amos: Rip said, right? Rip grip rip said, rip.

Chris: Yeah. Rip, grab, set. No, it's just SD. Now just SD. I found one that replaces tree. If you use the tree utility the other day, it's like GitHub keeps recommending that I look at these libraries for whatever reason. And I cause like, I guess I need to replace my entire Unix stack with Rust tools because you know, that would fix it for whatever the definition for whatever's broken. I'm not sure what's broken right now, but, but this will fix it surely. And so, and it's like, you go to look at it and it's like, oh, said replacement 2000 stars. It's like, well, you gotta be kidding me. Like what is happening? Right. Like the, this is it's so it's, it's just solutionism. And it's also like, do you just really like solving-Is this like, does this, how is this the best thing you thought to do with this language? Like, how is this the best thing that you could come up with and then go, whatever, it's your time and your, and your energy, you spend it however you want to. And if you're into that kind of thing, I mean, whatever, that's fine, but it's just, it feels like so much, like I just am searching for a problem. I just need to find a problem where the problem is, how do I make this, like, how do I use this language for literally anything? It just blows my mind. It's just, it's so silly to me. And like GO's like a terrible language, but at least they, people build real software in it. Like they build like big infrastructure projects in that thing.

Amos: You just never want to maintain it.

Chris: Well, I don't know. I mean, I mean, sure. I don't, but like, I'm just saying, like, it's just telling. It's just interesting. At least Go is like focused on, on solving a problem where the problem is like at least semi real, right?

Amos: Yeah.

Chris: I don't know. I don't know.

Amos: I had, I had to rile you up, you know, I have some resolutions this year, but riling you up is not, not one of them.

Chris: No, that's fine. That's, that's fine. You're allowed to do that.

Amos: So now that you have, have Norm out there and you've already released it, now you can use a previous version of Norm in Norm.

Chris: Yep. Bootstrapped as they say.

Amos: There you go, there you go.

Chris: Yeah. Yeah. I have thought about that because everything is represented as data. Um, there's no reason we couldn't delete literally every test that's in the Norm repo and replace it with like a single property based test that just generates all of the different types of specs and specifications that you could possibly compose together.

Amos: I'm in.

Chris: And then validates them. So you could there's, there's all kinds of things you could do.

Amos: We should totally do that.

Chris: Right! This is what I'm thinking, but you have to build sort of like a meta layer. It's it is like slightly complicated. It's possible to do though.

Amos: Well, I think we take the next two weeks off work and just do that.

Chris: I've already taken three weeks off work. I'm just, I'm trying to get back into work today.

Amos: What's two more?

Chris: Good point. You know what? You got me there. You got me.

Amos: Um, so any, uh, any speaking of the new year, um, I'm not much one for resolutions, cause I don't like to fail, but, um, actually I love failing so that's probably wrong. I should not want resolutions.

Chris: Uh, if you keep your expectations low, you'll always exceed them.

Amos: That's right. So, so do you have any, uh, Elixir resolutions for the year?

Chris: I don't know. Um, I've got some projects, some like not source projects, but some sort of like tutorial, bookie type projects that I want to work on, um, that I think would be really fun to do and useful for the community. Um, but otherwise I don't really have anything off the top of my head that's Elixir specific. Um, I've been thinking about this a lot. I said it a couple of weeks ago, but I've been really, really thinking about the idea of Elixir as sort of a boring language and that's becoming more and more appealing to me, just like the language I can use for a bunch of different things, but like the language I can put into production and build services with and like never worry about them and that, and I've been thinking a lot about like how you choose like technology, um, and how you choose to use certain tools in your company. Like using shared languages. Like the idea of like having a homogenous language that everybody talks in. Um, I used to be less of a proponent of that I used to, this is like before I, you know, this was when I was a young person, I used to like really buy into the idea of like, everybody should build whatever service they want in whatever language they want. And like, that's fine. And now I'm like highly against that idea. Like I really, really think that's a silly, I think that's like a waste of a giant waste of time.

Amos: So what changed your mind?

Chris: Um, I don't know, becoming responsible, like

Amos: Your meaning just got more gray

Chris: And just- Yeah. Like getting over it, like being tired of, of maintaining crap that doesn't work. Like I am, I don't know. I'm all about reducing cognitive load. Like I want, you know, we run some, we have some Ruby services here and stuff like that still and they suck, they suck so much. Um, and part of that is because Ruby is like kind of a sucky language with like a sucky runtime that, you know, I mean just is like, I mean, you can judge me for saying that all you want, but it, it just is like, it's like-

Amos: Oh no, we hit Rust. We might as well hit everybody else.

Chris: Well, I'm just saying like, if you're cool with like taking a 20 X performance hit, basically just because you use that runtime, that's good for you, but like, I'm not cool with that. And like the debug ability and introspection tools just suck, like the ability to like get into a running system and diagnose problems sucks. Like those things all, those are all terrible and it sucks to have to go back and use that, like to work on those apps because it's so hard to maintain them. Where maintain really means like get into the running system and fix it.

Amos: And, and understand, understand the code and what's going on. Um, that's, that's one of the things that I've been running into a lot is that, um, code that's, like, Ruby is, is touted as being able to be written, to be understandable, enjoyable, more English. And these big systems written in it I'm finding out are not.

Chris: Yeah. I just, I, I don't know, the more I use Elixir and Erlang stuff, the more, I just feel like it's a super power, like, and it's a super power that not everybody knows about. And I'm kind of like, okay with that, because it feels, it really does feel like a superpower, like, to put stuff into production and then to just not have to worry about it. Or like, if you worry about it, it's because like, when you do have to worry about it, you have all these tools at your disposal to get into the running system and like diagnose it and fix it, right. That to me is so useful and so powerful as a thing, like as an entity that I don't know why you would, I don't know what benefit you're getting out of like having this, this, you know, microservice infrastructure that has 20 different languages that you need to know and support because like you just can't conceivably know that many things. And I think people who optimize for like write it in the right tool for the right, you know, using the right tool for the right job. Like that's not a real thing. That's never been a real thing. No one has ever meant that sincerely, whenever they've said it. What they mean is like, I have two tools that I like, and I'm going to pick the one that I like more for this job. Right? Like, no one's ever objectively sat down and been like, we should definitely, you, you know, choose between Haskell, Pascal, OCaml, and Clojure for this. Cause like those all have different properties or whatever. It's like, no one's ever done that. People just look at stuff and they're like, we're going to use this. And they pick that because like a whole bunch of reasons, not the least of which is familiarity. And I actually think that's totally reasonable. That's totally fine. That's actually like the best way to make decisions.

Amos: Familiarity?

Chris: Yeah. Because if, and also like what you like, because like, if you, if you have an entire team that knows Haskell and you want to run Haskell in production, then you should do that because you like Haskell. And at the end of the day, code runs a lot more than you write it. Like, you know, code sitting in production, you have to work on it a whole lot more than you have to write it the first time. And at the end of the day, like you have to put stuff into production that you want to tune and that you want, and that, you know how to actually like get performance out of, and that you know how to make stable and you know how to observe and monitor. And that counts for so much more than any sort of like right tool for the right job nonsense that anyone's ever spouted. And like we're so much better off just calling it what it is, which is just like familiarity and preference. Like I like this more.

Amos: Projects, projects don't normally fail due to, actually, I'm going to, I'm going to go out on a limb. Projects never fail due to a technology choice, even if you want to do it in, in Ruby. Right?

Chris: Sure. Whatever. Yeah.

Amos: It doesn't fail due to a technology choice. It's communication and desire and the ability to stand up for what you know needs to get done and do it correctly. It's really, um, well now I feel like 10 years ago, buzzworthy, but it's, it's really your care of craftsmanship when creating it originally. And you're in communication throughout, uh, the project team or the company. And its pass or fail.

Chris: Yeah. I think the communication, the communication specifically is so huge because that's like the big problem, right? Like the big problem is, did I even understand the requirements? That's like the, the hard, the actual hard problem. And then right underneath that is like, did I build the right thing, given that I understood the right requirements? Like even assuming if I got past step zero, which was understand the requirements, now did I even implement those requirements correctly? And like that transcends all technology choices. I'm of the opinion that you should choose technology that you're comfortable with and that you're familiar with because it lets you have more time to focus on those two things. Like you don't want to spend- waste your time, fighting your tools, just because someone said that it would be like the right tool for you to use. Like if you hate Erlang don't write your thing in Erlang, despite the fact that you're building a chat app. You know what I mean?

Amos: Right. Like you won't, you won't do a good job.

Chris: Right. Because you'll be so focused on the problem of like on, uh, on the technology choice that you'll miss all of the important bits, which were like, did I even understand what was being asked of me? Like that's the, that's the actual important problem. And I think, yeah, so I just don't get it. I don't, I I'm all about like, I, I, I don't know. Like I think if you're going to pick choices like that, you should pick stuff that's like pretty boring. And like, and by that, I mean, you should pick stuff that you understand, that your team is familiar with and that your team is excited about maintaining because they're going to have to . Having 20 different languages supported by 20 different people is not a sustainable way to live your life. Just because like now, I mean, now what, like now everybody's got to learn how to tune everything. Like that's, that's untenable and not useful and like not a useful expenditure of time.

Amos: Right.

Chris: That's my, I dunno, that's my feeling on it, but all that to say, like, I really love where Elixir is at right now, which is to say like, I really love where Elixir the language is at right now, just because I think it is, it's like, uh, it's a super, fully featured tool that you can just put in production and, you know, tune and debug and run, you know, with, like stably. And that feels really good.

Amos: And I'm really enjoying the place of, I know it's, it's been two years since Jose said the language is done. So now I feel like the improvements that are going into it are, you know, getting more information, debug tools, um, the, the new release coming out adds, what metrics to, um, compile time so that you can get in and kind of see what's going on when it's compiling and, and maybe speed things up there or find bugs there. Um, so all the, the tooling that that's being developed now is, is awesome to me. Um, I'm, I'm at the same level of you, I'm, I'm comfortable in the language. I want to do it more. I don't know. That's kind of my resolution this year too, is I want to get back into doing some more Nerves and hardware stuff and also growing my company. So in that vein, I get to check both of those because Connor Rigby is coming on and we're going to be pushing out some, working on some Nerves stuff. And, and just trying to see what we can do to, to give back to the community too, at the same time. So that's, those are my, my resolutions this year is give back and get more because I am still excited after, I don't know, five years, six years-

Chris: Yeah, however long it's been.

Amos: Of, of working or at least starting to play with Elixir was like six or eight years ago, I think, um, is that I'm, I'm still excited about the language and I'm actually more excited today than I was then due to the stability that we're starting to see.

Chris: Yeah, I am as well. I mean, I'm, I don't know. I'm just really excited about it. I'm excited that like, um, yeah, yeah. I'm excited. I don't have to worry about it anymore.

Amos: Right.

Chris: So. And there's certainly like still stuff that needs to be improved, you know, and in terms of like, not language specific things, but just like quality of life things, but that's fine. We'll, we'll get there, keep working on that stuff.

Amos: So, look, look back at like the last year, what, uh, what big things happened in Elixir that, that use or improvements that you're saying that make the language better? For me, one is releases. Uh, I am glad that that got pulled back into the core and things are a whole lot simpler for getting releases out than they ever have been. That story is a whole lot better now. So thanks to everybody that worked on that

Chris: I think releases is big. I think telemetry is really important. Um, I think, telemetry is really important. Telemetry is not done in my mind. Like telemetry does not feel like a completed project to me. I don't know if anybody else feels differently about that, but I don't, I don't, it doesn't feel finished.

Amos: What do you think-What do you think it's missing?

Chris: Introspection! Good Lord! Introspection. Like it is not good enough to, to like read the docs, to find out what event, what telemetry events are published by any given library. That's just not good enough.

Amos: Yes. That's true.

Chris: And so we need, uh, we need better tools for that. I think that's a thing that's being worked on last I heard, um, that's come up a lot in the observability working group. And so they'll probably end up being some sort of thing to solve that. But yeah, that's, that's the big one in any case, but I think telemetry is a huge, a huge deal, uh, and really important. And it's nice to see that people are sort of rallying behind it. Cause I think that that's an, that's an important thing.

Amos: Yeah. I think the documentation for that has been improving recently too for telemetry. I know first when I tried to using it, it was, I was reading a lot of code to try to figure out what was going on and how to use it. So it's, it's become a lot more clear in the documentation.

Chris: Yeah. I'm trying to think of other stuff that I think is like really important. Um, and nothing's coming to mind, but that's, that's probably just me forgetting things.

Amos: So how about this? Why do you find telemetry so important?

Chris: Um because it it's an actual, a real unified way of talking about metrics, right? Like we've had a bunch of attempts at this. Um, there's been lots of things that are out there that attempt to do this. None of which have the same level of like flexibility that telemetry has and none of which, you know, all of which essentially try to do too much, they try to do too many things. They're not just like a dispatcher for events. Um, which I think it what-

Amos: Adding front ends and everything else try and -

Chris: Yeah. Adding front ends to it or adding just like, even like data types, which now you have to reconcile with, you know, whatever it is that you're actually using. Like if you're using Prometheus or StatsD or whatever, one of these sorts of situations, like, you know, you have to, if you were using like Exometer or whatever, and now you've got to figure out how a spiral translates into this other thing and what are, you know, it's like, those are all those all try to do too, too much stuff. I think that's part of it. I think part of it too, is just like, all those things were so nonergonomic to use from Elixir that they never caught on in Elixir. And as far as I'm concerned, all of like the Elixir is leading, you know, a lot of the direction on that stuff, just because like telemetry started as an Elixir project and became an Erlang project after the fact.

Amos: And I do love that, I do love that it ended up being an Erlang project.

Chris: Yeah, I do too.

Amos: Because then all those underlying libraries that we are utilizing can then add telemetry too and give us even more views into what's going on.

Chris: Yeah, I do too. It just seems to me that like, there's a lot of motivating factors. There's a lot of motivation around getting this kind of stuff from the Elixir community and we just tend to rally around stuff. And so, because we've all rallied around telemetry and everybody uses it, like it's the defacto standard thing to use, um, for good or for bad. I think in this case, you know, telemetry is a good library and it's a good project and it's good that we're rallying around it. Um, and it's great to see it gain more and more traction. It also means that like, there's this one unified way of getting metrics out of a system, which is really convenient if you've got a, you know, if you're working on like 10 different services and they all need to spit out telemetry data, like that's huge for us to be able to, to handle that. So, um, that's really, really important because it means it gives us this like unified way to talk about everything. And it's all done well. Like that's the other thing is like, before people built libraries and then attempted to have all these different ways of getting metrics out of them and half of them sucked and the other half like caused real big like performance problems and that kind of stuff. So it's like having this one way to do that can be tuned and like can be optimized and not bottleneck. And all this kind of stuff is really important.

Amos: I, so I like to use it, I want to say it's kind of like observer for me. Like it's the overall health of the system building health, like, dashboards using telemetry. Like I have the system I'm working on, we've talked about a few times with the camera images going through a series of steps. Um, I'm looking at timing, I'm using, uh, telemetry to look at timing of each step and like what's the 95th percentile of these things going through the system. So I can say, hey, we need to target this, this step in the system because we have an overall time that a, uh, an image needs to make it all the way through the system. So I can say, hey, this one right now is the failure and, and is causing us problems. So we need to work on speeding up that one or, or whatever. And then just throwing it up on like a dashboard in the room is fantastic because then I know in real time what's going on. And so does everybody else where you might be able to get that information from observer, but not everybody's seeing the same thing and you have to dig a lot and.

Chris: Right. Some other stat somewhere.

Amos: Right. And so it's been, it's been super useful and the fact that most of the libraries that I might be using to, to do any of my work seem to start, have some telemetry tie-ins. So I don't have to worry about trying to add that to any of the tools that I'm using. I think that's actually probably the, the killer feature, is I don't have to add it everywhere.

Chris: Right, right. Exactly. Yeah. I I'm paying a lot of attention to the work the group from Japan is doing on, um, different, like LLVM backend type stuff for like, um, that's, what's the term?

Amos: GPS stuff?

Chris: GPU stuff. And some of the other like optimization stuff that they're doing, I'm paying a lot attention to that. I think that there's some, there, there, I think that that's really interesting. I don't know if it's, if it's reached, I don't know what level, I don't know. I don't know where it's reached at this point, but I'm pretty excited about that kind of stuff, because there's definitely times where you're like, this is just too slow and you're down. And then you're like, what are you gonna do? Like write a NIF, like, I don't know, you gotta do something else at that point. And that sucks.

Amos: Write some C.

Chris: Yeah. Or like Rust or whatever, which is fine. I mean, it's, you can use Rustler for that stuff. It's a fine choice or whatever, but like, but then you gotta do preemption and like, or use dirty NIFS and like, not in, like, I don't know. I think like you shouldn't really, the dirty NIFS are they're there, they're there and there, you should use them, but like, you need to be careful about using those too, because like, if everybody uses those, there's still a finite amount of them. Um, and you know, eventually, like we're all gonna stave each other out of the system. So I don't know, like there's a, there's a case to be made to avoid using those if possible. But, um, in any case

Amos: They're not fun to debug either.

Chris: No. I mean, none of that stuff is, but

Amos: And it’s hard to use telemetry in C.

Chris: That's true. But in any case, like, I don't know, like there are times when it would be nice to be able to do that without paying the cost- and also you're paying a transport cost, right. Like you're paying costs of like, of, of like diving between these two worlds. Like there's a real, um, memory cost there and there's, and there's time costs there. So like for real, you know, I think the, the stuff that they're doing has, has a lot of potential to be really, really interesting. So, yeah. So we'll see where that goes.

Amos: Yeah, I'm, I think the first time I heard about the work they were doing was at a Lone Star last year.

Chris: Yeah, same.

Amos: And then at, uh, Elixir Conf, I was going to figure out what they were working on. And, um, I'm pretty that, that I think that could take Elixir Erlang to really, to the next level. Um, cause it just

Chris: It definitely has the opportunity to yeah.

Amos: It, well, it just overall increases the usefulness. And once you can start doing some, some bigger computing directly in the language instead of having to hop outside, uh, also last, I think this was last year and I know that you're a fan of using it in certain places, but persistent term, right?

Chris: Oh yeah. Yeah. I love persistent term.

Amos: Yeah. It's a beautiful.

Chris: Love. I think it is. I think it was last year. I don't remember.

Amos: I love it. It might have been two years ago, but, but that's all right. We'll just move past it. The older I get all the years just start to seem the same. It's just one long year.

Chris: So yeah. So I don't have a ton of, I don't have a ton of Elixir goals this year. I have, I have a couple things I want to work on that aren't really open source. I want to finish Norm, but that will be, that's not that, that's not that far away. I've got a couple of open source things I'm working on and none of that, none of that's super interesting, but yeah, I've been thinking a lot. Did you ever read, um, uh "So Good They Can't Ignore You"?

Amos: No.

Chris: That that's a really worthwhile book. I really liked that book a lot. The last, it's divided into four sections, the last section is a little bit like it's a little, it's a little, whatever. I didn't love the last section, thought it was pretty weak, uh, in terms of, cause it's a lot about like it's kind of platitude-y. A lot of, lot of platitudes in there.

Amos: With the title, I assume it's not a very thick book.

Chris: No, it's, it's sort of in the same vein of like, it's, it's kind of like a Malcolm Gladwell book in that it's a, uh, it's a blog post that became a book. Um, but it is really good and it's well written and I think the points in there are important. Um, but one of the, so like the key thrust of it, I'll give you the real quick, real, real quick version. But the thrust is that, um, the passion hypothesis, which is to say like, if you follow your passion, you should find a job wherein you can follow your passion, and like that's the way to be happy, is fundamentally flawed and is dangerous advice, which I tend to agree with. So I'm going in with like a, like a bias already. And his, his argument is that you are happy in a job by doing something that you find meaningful in the world. And also that you have a lot of autonomy in. Like having autonomy is like the way to, is actually like the way to be happy in your job. And.

Amos: I think we've talked about this before.

Chris: Yeah, I think we have, but in order to have autonomy, you have to, no one, autonomy is not a thing you get for free. And in fact, like control is not a thing that any company wants to give you or anyone else wants to give you, like control has costs and control is only for you. It only benefits you, it benefits no one else, which I think is also true. And um, so you essentially have to wrestle control away from people. And the way you do that is by exchanging your, you know, rare skills basically like you have to have skills that are worth, you have to have a skillset and you have to know about things in order to leverage autonomy from people. And if you don't have those things, uh, or you don't have enough, like as what he, what he calls like career capital, you can't get autonomy because no one's going to give you autonomy, um, unless you have something to kind of bring to the table, it's a, it's a barter essentially. So, you know, I've been thinking about that and I'm thinking about what that means. And I think this gets back to, like, we've talked about this before too, but this gets back to the idea that like, I'm so uninterested in learning about libraries or learning about the trappings of whatever, or, you know, it's like, I want to learn about like, if you were like, would you rather learn about this Phoenix internal thing? Or would you rather learn about greedy algorithms? I'm like gonna choose greedy algorithms literally every day, because that's a way more useful thing.

Amos: Yeah, yeah. In the long run.

Chris: For me, for me and the kinds of skills that I want to cultivate. It might be different for you in your job, but like that's kind of the trick, right. Is finding those skills and then figuring out what you want to practice and get good at in order to leverage more autonomy. And I think that that's kind of, that's the big thing I'm thinking about right now at the start of this year. I don't do resolutions. I don't really believe in doing resolutions. I kind of feel like if you want to change something about your life, you should just do it and you don't need to wait for like a specific time to do that.

Amos: Oh yeah. Definitely not.

Chris: But it is a good time, it's a good time to sit and reflect on certain things. Um, cause anytime is a good time to sit and reflect.

Amos: Yeah. I think it, a lot of people have vacation at this time, so it's a good time to just-

Chris: Yeah exactly. It's chill. It's, it's a, it's a slow time. Slow time. So, yeah. But I think that that's, you know, it's, I mean, that's what, that's the thing I'm thinking about is like how, what skills do I want to cultivate this year? Or at least in the next like three to six months. And then more importantly, I think this is the harder part, how to practice those skills deliberately, which is to say like how to find tasks that are slightly outside of your comfort zone and you, and, and like grow that skill set. Um, by doing things that are difficult. I think that's hard. I think like that deliberate practice is really hard or I have at least I have a really hard time with it.

Amos: Deliberately growing your skillset. Yeah. I think I get, I think I get stuck into whatever project I'm working on and then I try to grow my, I look for opportunities within that project to grow what I want to work on next. But I get so focused on that project that I have a hard time not thinking about that project. Like, you know, even over the weekend or in the evenings. So in order to grow my skill set, I gotta, I have to find project work that has something in there that I want to grow.

Chris: Yeah. And that's hard. That's really hard.

Amos: Yeah. I think it brings good challenges though. So, um, I'm okay with that.

Chris: Yeah. No, I agree. I think that's, but I think if you can figure out how to practice things in that kind of way, you're in really good shape. I think partially just because like learning how to practice things is really a useful skill, but I think there's a piece of metal work in there that isn't obvious, but in order to actually practice things, you have to understand where your current skill level is and like really understand where your current skill level is and then do something that's actually truly outside your comfort zone. Which is hard because that'd be, that takes a ton of introspection and, and trying to figure out like where you actually are at with certain things.

Amos: Well, and things are, aren't always fun when you don't know how to do them. Right.

Chris: I would say they're almost never fun. And that's like, the fun comes by like pushing through and persevering.

Amos: Right. Right. One, once things feel simple and you get a true understanding, that's whenever you feel like they're fun, right. And, and I think that's where there's, there's a lot of people who get stuck in one technology.

Chris: It's often not fun in the moment because it should be uncomfortable. Like if you can develop this, if you can develop a, a sense of having fun because it's uncomfortable, I think you're also in very, very good shape, but it should be uncomfortable. Um, and I think a lot of people, myself included get hung up on that. It's like, I don't want to do this, this, this sucks. Like I don't want to push, have to persevere through this. I want to get to the end where this is fun, where I've already developed the thing.

Amos: Let's just move past all this work part.

Chris: Yeah. I just want to jump to the, can I just skip to the end? Anyway, but I've been thinking about that. That's, that's actually the main thing I've been thinking about in the last couple days.

Amos: Those are good things to think about. Personal growth items,.

Chris: That, and all the libraries that I could rewrite in Rust. So many libraries,

Amos: So many.

Chris: So many.

Amos: *sighs* I think, uh, never mind. Never mind.

Chris: Yeah. That's, yeah, let’s not do this.

Amos: I was going to make a spray paint and joke about Rustoleum, but we'll just move on.

Chris: Nicely done. Uh, we should wrap this up soon.

Amos: We should. I need to get out of here too, but I have, I have one last thing that I think is really important for us to share. Um, cause not enough people know about this. I know where you live, you know about it. Um, but the, the purely wonderful and delicious blessing of being able to eat black eyed peas on New Year's so that you can have a prosperous new year the next year.

Chris: What about it? You want me to talk, what do you want to learn about?

Amos: I'm telling you the people in the North don't know that. I know that, but I'm just saying, we should share with, with all of our listeners, like you have to eat black eyed peas. You don't understand how amazing they are, especially with a little bit of bacon, but then you eat them on New Year’s and-

Chris: Yeah, I don't do bacon.

Amos: And that's how you become prosperous, right? You don't (inaudible) if you don't do bacon.

Chris: It's true. I don't, I mean, here's the thing.

Amos: It's not kosher.

Chris: My daughter, my daughter asked about this the other day. She is like, we are, we went out to the store to go buy a couple of things that we needed, uh, to make black eyed peas. It's known as ha-he actual recipe is called Hoppin John. Like, that's the name of the dish that people make on-Okay. So I'm explaining this poorly.

Amos: Yeah. You got to go back.

Chris: In the South, we have a tradition of eating black eyed peas and rice for New Year's on New Year's Day. And it's, the dish is called Hoppin John and people add all kinds of stuff. Some people add collard greens to it. Often it's served with ham, pork of some kind, you know, you might put a little pepper in there, if you're feeling spicy, I put pepper in mine. Like, like I put it like a bell pepper in mine.

Amos: Nice.

Chris: Um, you can use carrots. I mean, there's, I mean, people kind of just like throw whatever in there, but the, but the main point, like the main part of the dish is rice and black eyed peas. And um, and so we have that every year, we enjoy that every year and we, uh, but, and it's suppose, you know, it's supposed to bring you good luck or whatever. And my daughter asked me at the store, does this actually bring you good luck? And the way I explain it to people is, or the way I explained it to her was like, well, luck is really about, I mean, the thing is, is like you have to have, you have to have, everybody, success is a lot of getting lucky, a lot of success is getting lucky. And when, I mean getting lucky, I mean, like having opportunities, realizing that you're having, that you're getting an opportunity and then working really hard at that opportunity. Like, but like getting the opportunity at all is a little bit lucky, right? The good news is that like people get opportunities in their lives. Like most people get a lot of opportunities in their lives. Um, more than I think we realize sometimes. And you know, the trick to it is realizing when you are having, getting an opportunity and then yeah, just like working really, really hard at it. Um, and in some ways, so I think that, you know, that meal, uh, is a lot about eating what you have available to you like rice and black eyed peas, which are not super tasteful things. Like they're not super flavorful things, but it's like, you know, this is what we have and this is what we can make today. And we eat this very simple dish and it reminds us that like, you have to take advantage of like what you're given, even if what you're given is not a lot. And you have to work really hard at it and like, you know, stick with it. And like, you kind of make your own luck out of it. And that's how I think about it, I think. But I don't know. I don't know if that's accurate or not, but it feels good. It's got, it's got a good platitude in there. It's very, it's high on the platitudes. Uh, so we'll see. I don't know if it's real or not.

Amos: I think it's great. That, and you can recognize opportunity better after you've had a meal.

Chris: Well, here's the deal. My Hoppin John's really good. Like I make really good Hoppin John.

Amos: We're going to have to have some Hoppin John,

Chris: You got to throw a ham hock in there though, which grossed my daughter out.

Amos: Yeah. You don't want to look at a ham hock when it's raw.

Chris: No.

Amos: Or even cooked necessarily. It doesn't look great. But, yeah.

Chris: Um, last, last point of order for we sign off here is a new year new you. I was thinking about adding- we can try this out. Trial basis. This is a trial basis. I was thinking about adding a new segment at the end of the episode.

Amos: Oh yeah. You've mentioned this. I forgot what it was though.

Chris: Wherein we take, we answer questions from listeners.

Amos: So. Tweet us your questions.

Chris: Yeah. So yeah, Twitter is fine. Twitter is fine. Amos will cultivate the good ones and then he will ask the hosts, but only the good ones. Listen, if you want to just like screw around, you know, take your business elsewhere. That's it. I'm just kidding you. You can screw around.

Amos: I mean really start out -the best questions, the ones that are probably going to get picked are like "What did our kids eat for lunch?"

Chris: I would say so, yeah.

Amos: Cause we usually stick to breakfast, right.

Chris: What exactly, what exactly do I put in my Hoppin John?

Amos: Right. These are great questions.

Chris: Exactly. These are, these are the hard hitting questions that we're here to answer.

Amos: This is what we're talking about.

Chris: And yes, If you want to send us questions, you can send us questions. If you want to send us a long form question, um, I believe that we have an email.

Amos: Yes we do. Actually,

Chris: That's available on, actually, I'm not going to tell you because I don't know.

Chris: But actually, it’s on the Elixir Outlaws website.

Amos: Just also just go to our website. There's a form. There's actually a form.

Chris: Yeah. And you can send us questions that way and we'll be happy to answer any questions.

Amos: There's a lot of spam that comes through that form though. So,

Chris: But there is, there often as good feedback too.

Amos: Yes, and we will wade through that and find it.

Chris: We were going to take that on ourselves to do that for you. And this is all for your benefit.

Amos: Now what Chris means by we're gonna take this on ourselves is Amos will go through the spam and have questions for us. Yeah. Perfect.

Chris: Exactly. We said the same thing.

Amos: Yeah. Yeah, exactly.

Chris: So, yeah. So we're going to do that and I think it's going to be fun and if it's not fun and we won't do it anymore, but I think it's going to be fun.

Amos: I'm super excited. Let's try it out and see what's going on. And next week we have a guest and that's all I'm going to say about it.

Chris: All right. That's a, that's some pro that's, that's a pro move right there. It's yeah, we really we're really stepping up our game in 2020.

Amos: It's a deep tease. All right. Well thanks Keathley. I gotta get back to it .

Chris: All right. Have a good day.

Amos: Take it easy.

Chris: You too.

Amos: Bye.