Coding Blocks - Code Confidence using NASA’s Ten Simple Rules

Episode Date: October 2, 2023

We’ve mentioned in the past that the code we write isn’t maintaining heartbeats or being used in life-critical settings, but what if your code is? NASA happens to be a company who has code that is... life and mission critical and it’s very possible it won’t even be accessible once it leaves earth. In this […]

Transcript
Discussion (0)
Starting point is 00:00:00 all right i think we're ready to do this thing are we because if we are then this is episode 219 uh that's one more than the last time so i guess we're recording now in the show's life and alan loves it when we start this way take a deep breath yeah that's true alan and out breathe out is that what they said on Bad Boys? Gruesfaba? Gruesfaba? Something. Something faba. And we are recording. This is Coding Blocks. Visit us at
Starting point is 00:00:33 codingblocks.net where you can find our show notes. We'll start chopping up onions in the background or something. I was trying to like channel my best NPR kind of voice, you know. Very relaxing. Thank you. Yeah. Very nice. Well, I'm Joe Zach.
Starting point is 00:00:51 I'm Michael Outlaw. I'm Alan Underwood. And for this episode, I thought a fun topic might be learn how to space proof your code. Have you ever wanted to do that? Have you ever even thought about that? You mean on the moon type space or like Mars? Or what are we talking about? What kind of space do you think I meant?
Starting point is 00:01:15 Did you think I meant like, you know, space between like, hey man, I need some space. We need some space. Step back. I don't know. Step off. That's the kind of space-proofing code I'm writing. Step off.
Starting point is 00:01:24 See? Okay. Well, that's if kind of space proofing code i'm writing is step off see see okay well that's if you believe in space yeah i started getting uh facebook ads that like kind of make fun of like things like the earth being around and like the space shuttle being real and i live in central florida right so i've seen many space shuttles my entire life going up and i saw little uh comments on facebook of people questioning whether uh anyone's ever actually seen the shuttle go up because they didn't quite believe that they were fast enough because look at them don't they look dumb and and where did it actually go did you actually see where it went i mean i went out of my range of vision i've seen them explode too you know i've
Starting point is 00:02:02 seen them like you know I've seen them disappear. How do you know it wasn't just an RC shuttle? That's right. Just saying. Did they let you up next to it? This is all suspect. It's true. This has definitely
Starting point is 00:02:21 taken a tangent that I didn't account for. Hey, we're off. We're off to a great start already then. Hey, you're the one that brought up fake moon, so whatever. All right. Did I bring it up though? Okay.
Starting point is 00:02:35 We'll go have to rewind it. Fake moon. Oh, I did. There it was. Nice. So this all starts from my son sent me this video a while back. I've been holding on to this topic now for a while, but he sent me this video that was pretty neat. It's on YouTube. There'll be a link to it in the notes, the show notes, which by the way,
Starting point is 00:03:01 if you don't already know, you can go to codingblocks.net slash episode 219 and you'll be able to find the show notes for this episode, which will include this link. But there's a video on YouTube called How NASA Writes Spaceproof Code. And the idea here was that this, the video is based around this set of rules that NASA has called the power of 10. And the idea behind these rule, this set of rules is to help ease static analysis, but also like just more generally, you know, uh, right. Cleaner code, you know, easier to debug and things like
Starting point is 00:03:45 that. But they heavily rely on static analysis for doing things. And, you know, really like the end goal being like, you're going to write code that's going to run on some robot that is, you know, some obscene number of light years or, you know, whatever, something not light years, I guess, but, you know, some nine months away from you. Right. And you know, you're going to have extremely limited communication. So, you know, those robots need to work on their own, right. That is until like Megatron comes and gets them. Cause I did see a documentary where that happened, but whatever. I digress. So documentary.
Starting point is 00:04:19 So, so, uh, well, yeah, cause the Mars rover stopped communicating, but yeah, whatever. So we're going to discuss the simple, the 10 rules that they have. And some of these are going to be like, well, that seems kind of obvious, you know, but then some of them got a little bit more interesting as we go. So I'm going to throw them out there and then we'll discuss. So rule number one in NASA's power of 10. And, and, oh, by the way, I should add, you can easily Google NASA's power of 10 and you will find
Starting point is 00:04:53 8 billion Google results. And so I'm going to say these rules like rule number one, blah, blah, blah, blah. And some of the results that I found, like the rules were in different orders. So, uh, you know, I tried to find a more official NASA link for it and I, I can't came up empty. So whatever rule number one, simple control flow. So this is meaning you're not allowed to use statements like go to or set jump, long jump, which, OK, those those all sound fine. But here, you know, because you're going to think with those like, oh, well, that's going to be like super language dependent. But the big one here is recursion. No recursion. Right. Good riddance. Yeah. Some of these are going to be like that,
Starting point is 00:05:53 right? Some, some of these are going to be like, yeah, I love that idea. Like no recursion, but you know, you think about like all the trouble that you can get into with recursion. And we've talked about it in the past with like, um, you know, stack overflows and things like that, right. That you can get the troubles that you can get into with recursion. But like, so the point that I'm trying to call out here is that some of these are going to seem very specific to a given language. And some of these are going to, are going to apply to all and like the recursion one applies to all, but a go-to, you're not really doing a lot of go-to in Java. Feedback, comments, thoughts, rants? The recursion one's funny because I was almost writing something that was going to be recursive the other day. And I was like, you know what? No.
Starting point is 00:06:43 No, I'll find another way yeah no the deal is that most things that are recursive at least there's an iterative way to to run it that's going to be much safer and is less likely to kind of explode on you at least in terms of like memory and frames because just calling functions is expensive because the way the whole you know stack works like each one is a frame each one allocates memory like it's generally bad news if you can replace that with a variable and so like all those kind of like um you know uh what's it not fibonacci what's the one where it's like the it is fibonacci where like you can add the numbers up recursively like it's a beautiful algorithm recursively it's a terrible idea you're much better off just doing
Starting point is 00:07:18 a loop but it always feels so like you feel like you're in control of the matrix when you do it right like you feel like super cool and that's the matrix when you do it, right? You feel super cool. And that's the problem is that there are some of these things that you can feel super cool about doing it. You're really taking advantage of the power of whatever that framework is. And yet, they're still like, well, yeah, I mean, you can. Right. Should you? Well, you know, on that topic, the reason why I ended up stepping away from it was because I think I was doing something in JavaScript. I don't even remember exactly.
Starting point is 00:07:55 But I was like, you know what? Let me just find out what's the max depth of a stack here. I don't think that it's going to be that large for my needs. But I started reading and they're like, well, some of them do 10,000, some of them do less. So, and when I say some of them, we're talking about the engine. So it's like, you're not even guaranteed a certain number across that particular, you know, stack or whatever. I was like, you know what? All right, I'm done. I will go the iterative way. Just like Joe said, you know, there's, there's other ways to do the same thing and usually way easier. It just seems like, Oh, it'd be real cool if I could do this. And then you're like, no, it's not. So rule number two, limit all loops to a fixed upper bound. So think about like anytime you've ever done like, you know, while this variable is true,
Starting point is 00:08:50 do something, right? But in their rules here, not, you wouldn't just do that. You'd say like, while that is true and my iteration count hasn't exceeded whatever my maximum is. And so the example that was given was like, think of a linked list traversal, right? You could easily say like, Hey, while the next node is not null, continue reading, right? But to prevent it from going out of control, right? Then you also add in this boundary check on it as well. And they specifically say that like, hey, if a tool can't prove that the loop bound statically, then the rule is considered violated, right? Okay, I get that.
Starting point is 00:09:45 Could you back up a second? I don't know if I missed it or where it was. This power of 10 is I see that you have to ease static analysis. Like what, what do we mean there? We're going to, we're, this is going to be like a common theme through all of these, but like using a static code analysis tool against this, right? These are all efforts so that those types of tools, right, can more easily review your code. Okay. So in the past, we've talked about like, oh man, just slipped my mind.
Starting point is 00:10:24 The.NET one starts with an N. N depend. N depend, thank you. And then I think SonarQube might be another one. Yeah. Or maybe I'm wrong. No, it's not. QSonar.
Starting point is 00:10:36 No, SonarQube. One is the music software, the other one. Yeah. SonarQube with a Q is the software one. Yeah. There you go. But, yeah, so the idea is that anything that you can do to better analyze your code with these tools, then it's going to help to improve your code, right? Okay, okay. But some of these operations that you might do, like recursion, make it dramatically more difficult or drastically more difficult for those those static analysis tools to analyze your code.
Starting point is 00:11:12 OK, and so we're saying by also limiting, you know, the length of whatever kind of loop that's running at that point, you can also dramatically or drastically reduce the possibility that you're going to get into an infinite loop don't even have to check for it because it's going to be done bingo you're not going to get into an infinite loop because you have a boundary on it yep okay so some of these yeah go ahead well they're doing these things i guess because you're writing software like you said for things they're going to be thousands of miles away. And you may not be able to control it at that point. So it needs to be able to do simple things to recover is, I guess, the whole point of this, right? And predictable.
Starting point is 00:11:58 Predictable. Maybe there's some sort of problem with the linked list or something, but we still need other systems to function. And we don't want to starve, like, the, I don't know, the Oxygen software because the Fuel software has a linked list with, you know, something. So, like, we need to keep things moving. It's interesting that you chose the word predict because that's a great segue into rule number three, which is do not use heap memory. So, you know, their examples, a lot of the code here was, you know,
Starting point is 00:12:34 and NASA's rules are largely based around the C language. So, you know, there's no need for the use of malloc or free in this case. But instead, only rely on the stack memory right and the reason why i called out uh your use of the word uh predict was that it makes it easier to predict how much memory your application is going to need if you're not dynamically allocating memory on the heap. But also what they called out was that, you know, there, I think they use the phrase, the video use the word notable, but there's quite a few memory bugs that exist due to the use of the heap and garbage collection, right? So various memory leaks, use after free is a special type of error,
Starting point is 00:13:29 heap overflows, heap exhaustion. All of those problems go away if you say, nope, you can't use the heap. You can only use the stack. And if you're only looking at the stack, that's really easy to analyze to find out exactly how much RAM you need. Exactly, because you're only looking at the stack, that's really easy to analyze to find out exactly how much RAM you need. Exactly, because you're only using it in static analysis.
Starting point is 00:13:52 Applications that make use of the heap cannot be proven by a static analyzer. But to your point, the flip side then exists. They can easily analyze stack use. So yeah, we're tiptoeing towards formal software proofs. We're reducing the problem set to where we can get, just focus on predictability. So the heap, that could cause problems in the function I'm running now just because I'm out of heap space,
Starting point is 00:14:17 which has nothing to do with the thing I'm trying to run right now. But if I eliminate the heap, then things should run consistently. And so as long as there's enough memory for me to allocate this on the stack, then it should run the same way every time. Yeah. So by only using stack memory, including the upper boundaries where necessary that I mentioned before, you can compute exactly the amount of memory your application will need. Right. You're removing the guesswork out of this sort of thing. Right.
Starting point is 00:14:43 You're saying like, hey, you go into this function. This is the amount of memory it needs. Right. And it can now be proven by a static analysis, you know, and bonus by only using the stack, you eliminate the possibility of the previously mentioned memory bugs. And for those who don't know, quick refresher, right? The heap is where objects go and the stack is where any variables within a method call are put, right? Like, so if you have,
Starting point is 00:15:17 if you define a variable or something inside or is passed into your method, I wouldn't, I wouldn't phrase it that way because you could have objects that are definitely in the stack, right? It's, it's going to be a matter of like, if you had, if you had a string,
Starting point is 00:15:36 like if you had a, I'm thinking in like terms of C plus plus, right. And you had a class that had all primitive data types like integers, right. That could easily sit in the stack. But if it had a string pointer, then that pointer is going to be off into the heap,
Starting point is 00:15:51 but the pointer itself would be in the stack, right? Right. So yeah, the 32-bit or 64-bit pointer is going to be reliably allocated on the stack, whatever that function is called. And what's nice about it is when the function exits, all the memory is automatically reclaimed. You don't have to worry about anything dangling or whatever.
Starting point is 00:16:08 Yeah. So, so, but, but that example of like that class where the pointer is pointed to the heap, though, is the example of what you wouldn't want to do per NASA's power of 10
Starting point is 00:16:18 rules, right? You would, you would want to shy away from, uh, you know, things like that. So, um,
Starting point is 00:16:36 and, and some of this, like, you know, to be fair, cause it's been a minute since I've done any C and C plus plus type programming. Right. It's like, Hmm. Okay. Like I actually like looked up some of the stuff I was like, wait, how's that? Wait, it's been a while. How does that work? So some of this, I'm like, man, I don't know how you get around some of these things. Like, like the, the, the string example, you know, like, I'm like, how do they get around that? You know, I mean, I guess you could like, you know, a fixed, a fixed size, you know, but yeah. Um, again, it's, it's been too long for me to, to, to know on some of that. Right. It's a file. I don't know that they're going to want that either to do what was that right to a file. Yeah, sure. They'd love that. No. Um, yeah. And, and like I ran out of time cause i was like putting these notes together before
Starting point is 00:17:25 we record so like i said i did you know have to go back and look at some of them but some of them i didn't have time so that was an example of one i didn't have to go i didn't have time to go back and find but um okay so so far pretty interesting right like you know i mean the heap one was my favorite uh of them and uh you know but the next one I was like, OK, well, this one's this one's going to sound familiar. Right. Rule number four, limit your function sizes. So going back to the old school classic, you know, function should only do one thing, but it might require multiple steps. Now, this is very consistent with like the Uncle Bob series of books and other best practices and
Starting point is 00:18:09 principles that we've talked about over the years, right? And Uncle Bob takes it to a more extreme, like, you know, I think he had like three lines, like, you know, you shouldn't have a method any more than three lines. And, you know, NASA doesn't restrict it to that. Their recommendation is that functions should be limited to 60 lines or whatever can fit on a single printed page. And the reason for this limitation is that, well, there's a couple of reasons. One is that it makes it easier for someone reviewing your code to be able to read that entire function and understand it in its entirety without having to like flip back and forth, right? They can just look at it on the screen and be like, okay, I see what you're
Starting point is 00:18:54 doing there. Right? So that that's number one. Number two though, and this is kind of going back to the old school classic, you know, principles that we've talked about over the years, because you've had to make it smaller, that also, uh, maybe inadvertently made it easier to make that method testable. Right. So, you know, you had, you got this like side effect that you might not have intended, but in like, I kind of wrote this wrote this joke about it's not just some meandering 2,000 line long function with 18 levels of nesting, right? Because at some point in every one of our careers, we've all seen those types of files where you open up some class or some file and you're like, why is this thing 12,000 lines long?
Starting point is 00:19:44 Wait, it's all one method you know like so so and those are like really hard to read right so rule number four is to limit all that but also a very you know like we've talked about that one before. Uncle Bob, uh, this was another one of the ones up there in terms of like my favorites. So, um, rule number five is hide your data. So there was a quote in the video. Um, and I wasn't sure if like this quote, if the, if the video author was,
Starting point is 00:20:25 you know, attributing it somewhere else, but so I wanted to be careful to call it out like this quote, if the, if the video author was, you know, attributing it somewhere else, but so I wanted to be careful to call it out. Like, Hey, you know, um, I'm quoting the video and the video might be quoting something else, but data hiding is a technique of hiding internal object details. Data hiding restricts the data access to class members and it maintains data integrity. The idea here is to declare your variables as close as possible to where they are used at the lowest possible scope. So think of an example where you have a function and maybe inside of that function you have a loop and maybe inside of that loop you could even have like another conditional, like an if statement or something right there.
Starting point is 00:21:07 Wherever you need, if the lowest point that you need that variable, if it was inside that if rather than just declaring it up above at the top level of the function, instead declare it at the lowest level inside of that if statement, for example, and that way you're reducing that variable scope. Now that's also going to be language dependent, right, because JavaScript did the hoisting for you. So let's ignore that example from them because, again, we're living in NASA's sea world here.
Starting point is 00:21:47 So in this case, we get into like, what was it like ECMAScript 2015, where you could do the lets and, you know, so that you, so that JavaScript would honor those, those lowest scopes. So by doing this, you get a couple of benefits of it, right? Um, first it reduces the amount of code that can access that access those variables. Right. But maybe more importantly, is that by reducing those number of touch points and the number of places that could possibly change that variable value when when it comes time for you to debug it, because you like hey how did it get that crazy value by limiting that it aids your ability to debug it right because you're like oh well this is that it that that variable is only defined inside of this if statement which is inside of this for loop you know so you know that's slick yeah yeah so i think so far in terms of like these rules
Starting point is 00:22:48 the not using the heap was probably my favorite the hiding data was second and then um you know the recursion not you know simple control flow is probably third so far. You know, it's funny. Like I would say that mine, one of my favorite was the limit all loops to a fixed upper bound, because it's amazing how easy you can get in a runaway situation and not even realize it, you know? But this last one, the hydro data, that's something that I've always kind of done over the years, right? Like if there's something that I need set, like I guess just internally, and it makes sense. And I think the whole reason I ended up doing it was for debugging, right? Like how many times in your early career did you have things getting set all over the place?
Starting point is 00:23:36 So you're like, how did that get that value? And you realize that you had sort of leaked its implementation all over the place, you know? Yeah. Another way to interpret that one, though, is if we get into like an object-oriented world, right, it kind of makes you want to shy away from using member variables because then their scope is like every method can potentially touch and alter them. Right. Yeah, totally. So, you know, again, there, this was more from a C perspective, so that's not really a problem for them, but, um, you know, just, just trying to like, okay,
Starting point is 00:24:20 how can I take some of these principles and apply it to my day job, which is not writing for a robot in C in space. Space robots. I like these so far. They make sense. Yeah. I thought they would be interesting to review. And, you know, I say review because a lot of these like are things that we've probably talked about in various topics related to like an uncle bob or something or maybe we haven't thought about or ever like really formally like described but you know like to your point about the data hiding you know like it's just something that a practice
Starting point is 00:24:55 you put together you know like you fell into by mistake right without like really formally defining it so um okay so you know uh speaker reviews i just googled to see uh you know what the deal is with reviews because it's been a while uh since i've seen you know since just saying it's been a while since we got one uh it turns out uh that five star reviews are the best they're really good actually they're really good for podcasts that really help us out a lot and uh you can only give yourself so many of them so i was hoping uh if you're out there uh listening right now you could hook us up with a review too because it really helps us with the show and uh yeah i I've hit the limit. And so that would be really great. We've got a URL set up, codingbox.net slash reviews,
Starting point is 00:25:49 where you can go and click a link and drop it. Let me, five star review would be great if you could hook us up with that. And we've got a couple of links there to try and make it easy for you. And yeah, five stars would be great. Wait a minute. No, no, no.
Starting point is 00:26:04 Alan likes the three stars. No, that's yeah, five stars would be great. Wait a minute. No, no, no. Alan likes the three stars. No, that's never, that's never come out of this man's mouth. Three stars, right? Yeah. I'm looking at it right now. It says, I thought hat tricks were good things. I thought that's what I'm confused now. Hey, I will say, so we didn't actually have a review on the episode, but, um, ironically
Starting point is 00:26:24 enough, man, this is so bad i'm i am terrible at this so i got a proper name a noun well now no no it's more just dealing with social media stuff so i apparently got a message on linkedin in july of 2022, thank you to us for doing the podcast. It was like sort of a mini review. And, uh, I replied the other day, a year, a year and some months later, you know, what's funny is when I saw this message the other day, I was like, Oh man, I'm like a couple months late. I didn't realize I was like a couple of years late, but you know, Hey, if you want to reach out to us that way too, that's really awesome. You know, um, thank you. Anybody who takes the time to, to send us in some, some love for the, uh, 10 years. Hey,
Starting point is 00:27:24 have you guys been getting a bunch of, uh, LinkedIn happy anniversaries, um, for, for the podcast? No, but I am glad that you called that out because I was meaning to mention that the 10th year anniversary of Coding Blocks went by and we didn't even mention it. And it depends on how you decide to count it, right? Because I went back looking and I was like, okay, there's when we actually formed,
Starting point is 00:27:47 you know, the, the, the LLC behind it or versus when we released the first episode versus when we first set up the website and the first post versus when we first got together and recorded, because we recorded before anything was, was,
Starting point is 00:28:03 you know, ready. Right. We started recording. We still ended up doing it. Right. Like we recorded and we was ready. We started recording then. We still ended up doing it, right? We recorded and we were like, hey, this is still a decent idea. Let's go ahead and do it. So my point is no matter what metric you choose to use as the birthday for it, we passed it.
Starting point is 00:28:20 We totally 16 candles that thing, forgot all about it. Nobody paid us any attention. And yeah, there's a John Hughes reference for you. Well, we know outlaw knows what day the first episode was published on the website. Jay Z, do you know?
Starting point is 00:28:36 No. See, I was wrong too. I would have thought it would have been like September 20th. I thought it was August something. No. Oh, you were wrong. Look at that. September 20th. I thought it was August something. No. Oh, you were wrong.
Starting point is 00:28:45 Look at that. September 9th, 2013. The very first episode is published by Joe Zach. No, no, no, no, no. I thought it was you published, published the very first. Oh, you said episode episode. I, okay. I was thinking the first article on the website.
Starting point is 00:29:04 Oh no, I don't even know what that is that one predates that one and that's the it was like a interface guardrails thing yeah IAS for interface was number one that's the episode I'm talking about the article though
Starting point is 00:29:20 I don't even know how many pages I'd have to go deep here but alright so yes at any rate we all missed it but thank the article though i don't even know how many pages i'd have to go deep here but all right so yes at any rate we all missed it but thank you to everybody who's reached out and been like hey you know congrats um i think we're one of the few granddaddy uh podcasts still around so back in my day right seriously it's uh it's pretty awesome said so do we get like bumper stickers like my podcast can beat up your podcast or something like that yeah is that what we're talking about i never said i ever say that i have uh it's a crap let's say that says uh my podcast
Starting point is 00:29:58 is smarter than your honor student august 15th interfaces as guardrails. Dang it. Isn't that crazy? August 15th. Michael for the win. How about that? That's crazy, man. Told you. August.
Starting point is 00:30:14 Yeah, actually, I have that sticker on my car, but it's hard to see because of all the other anti-moon stuff and whatever else I got on there. And all the tinfoil kind of covers it up but i do get a couple comments sometimes the tinfoil covers okay amazing all right so yeah that must work well in that florida heat too all the tinfoil on your car yeah it's got to be good you know i'm saying i get a lot of looks you I'm saying? You're causing the global warming with that tinfoil, sir. That's what's up down there in Florida. I get a lot of second looks. That's all I'm saying.
Starting point is 00:30:51 They see me rolling. Okay. So let's see. This is episode 219. According to TechHose, trademark rules of engagement. Alan, you are first. You are on a losing streak. I don't mean to you know shame
Starting point is 00:31:06 anyone but you know technically yeah yeah so your choices are this is uh oh yeah we still haven't come up with a name for this but um you know we got a bunch of good ones i always got a bunch of good suggestions okay let's hear it let's hear it all, uh, it's gonna take me a second to find it. Um, okay. Episode discussion. Slack has a ton of great names. You, you, you look that up and, I'm going to give the topics out here.
Starting point is 00:31:33 All right. See what I did there or multi lovely. Oh, that's one of the, that was a topic. Okay. That book you've been meaning to read or at the store or going through some cycles or the Edwardian era.
Starting point is 00:31:56 Why am I saying that? Right. And Edwardian. I think I said it right. Yeah. Or the a list where the a is the first letter of each response so those are your topics well i don't like any of these um let's do at the store okay and we'll go we'll go middle of the road three three well you guys level three keep going to three let's go four oh here bump it
Starting point is 00:32:21 up one that's four here at the store this convenience store took its name in 1946 from the extended hours between which its stores were open 7-eleven what bingo what is 7-eleven he didn't even hesitate on that one. Well, kind of, but not for long. Yeah, I would have probably struggled on that one. It's like, wait a minute, Walmart? Took its name from the hours it took. Yeah, I was like, how is that possible? I thought it was named after the guy. It was like Walton or something.
Starting point is 00:33:00 That's amazing. All right, Joe, you got the names ready? Yeah, I got a couple of them. So Scott Harden mentioned mental blocks. Ooh, I like that. Yeah, sometimes it's hard to remember. That's pretty accurate. Graham asked to chat GPT, and here's a couple of suggestions.
Starting point is 00:33:20 I'll just blast them real quick. Code Challenge Clash, Coding Blocks Conundrum, Algorithm Arena, Binary Brain Teasers, Debugging Duel, Codecraft Quiz, Stack Overflow Showdown, Dev Duel, Jeopardy Edition, Codemasters Challenge, and Byte Battle, Coding Edition. Some of those weren't bad. Yeah.
Starting point is 00:33:39 I got to say that the mental blocks, like kind of keeping with the theme of coding blocks and, you know, the listeners being blockheads. And a human one again. Yeah. I'll take it. Yeah, I love it. I love it.
Starting point is 00:33:53 And also I suffer from mental blocks. Yeah. Like right now, even. Well, you're going to have to get over it because you need to think of which category you want to choose from next. Historic ships. Oh, okay. Go want to choose from next. Historic ships. Go ahead. Historic ships. Historic ships. The Bible.
Starting point is 00:34:11 A trip to the museum. Body part phrases. Musical theater. Or driving in LA. And since you said the Bible. No, just kidding.
Starting point is 00:34:26 That was category two. That was for the last one. So let's go with body part phrases. Okay. One, two, three, four, five. What kind of level you want to go with it? I mean, seven or eleven. So I'm going to go with two.
Starting point is 00:34:41 Two? Okay. I mean, Alan stepped his game up. But yeah, sure. We'll go to yeah no shame there body part phrases to fall in love in a surprisingly complete manner is to do so this way mentioning body parts on two extremes what is head over heels so lame that is correct that is correct man got it high game this is interesting now here we go here we go this is i wonder yeah you would have gotten you would have gotten number four by the way had you had you decided to like man up and
Starting point is 00:35:22 go for the fourth oh i didn't mean to shame you when I said that. Yeah, I feel the same. Well, what's number five then? Because I'm going to get that one too. Oh. Well, we're moving on. He said no. Yeah, you'll never know.
Starting point is 00:35:36 Okay, all right. For the spirit of it, I'll read it real quick. The fourth one, and this is why I was saying you would have gotten this one. From World War II came a reminder to be careful what you say around others, because these sink ships, loose lips. There you go.
Starting point is 00:35:51 And the fifth one was when you need to concentrate on your ultimate goal, remember to keep this a rhyming phrase involving visual organs. Um, visual organs, eyes. organs of the eyes. What was the... Eyes on the prize. There you go. Eyes on the prize.
Starting point is 00:36:13 All right. So for round three, back to you, Alan. You get to pick the category. Yeah. Your choices are brush up your Hebrew. Don't laugh at me.
Starting point is 00:36:26 Historic events, a trip on the Gulf stream. Oh God. He's going to pick this one. Sports stars. Oh, there it is. American folklore and legends or computer science with Matt.
Starting point is 00:36:44 Amadio. We got to do computer science, don't we? I'm saying that one wrong. For the first mental blocks winner. Even though I feel like sports is better. You're allowed to pick whatever you want to pick, but Matt, and man, you know how I am with proper nouns. Matt Amadio is a Je jeopardy super champ and yale phd focusing on
Starting point is 00:37:08 artificial intelligence and machine learning and uh yeah so these are these are questions from him so let's do computer science let's go middle of the road because i'm not a ml guy okay here we go in this code that's the basis for digital computing my beloved cleveland guardians would have retired bob feller's number one zero zero one one and jim thorns one one zero zero one what is binary that is the correct answer. I get it. I can't believe that was a level three. What was level four? These are all, this isn't, how deep do you think they're going to get on Celebrity Jeopardy?
Starting point is 00:37:57 Did you really think that they were going to be like, okay, given this linked list, find the bug. I mean, anything. I don't know. I feel like cheated and number four a statistician who annoyed some computer scientists by butting into our field john turkey turn yeah turkey came up with this eight letter word for the programs that tell a computer what to do algorithm uh algorithm uh assembly no no no no i don't know what is it software so oh come on we lose all right you want to just go down this the computer science one just for kicks yeah yeah why not let's do it before the hard disk era the storage of data or programs known as this word took more cumbersome forms like huge circular drums and
Starting point is 00:38:51 reels bearing hundreds of feet of tape i was gonna say tape yeah uh i don't know what is real to real? No. What was that? I forgot the first part of the question. Mental blocks. I mean. Memory.
Starting point is 00:39:11 Yeah. Memory. Memory. Oh, man. Able to recognize patterns and help solve problems. Neural networks are designed in imitation of this roughly three pound item. Your brain. That's pound item, your brain. That's right.
Starting point is 00:39:26 The human brain. Uh, let's see. We did that one. We did that one. Last one. This word means a procedure for solving a computational problem. It can be simple,
Starting point is 00:39:38 like the steps of long division or complicated, like the ones search engines use to deliver results. And now I got it. Jay-Z got it on question number two or three or something. Yeah, I forgot to count the letters. I got so excited about saying it wrong. Yep. So, all right.
Starting point is 00:39:58 So back to NASA's power of 10. So think of like, what was uh um oh shoot the looney tunes character uh dag blasted blah blah what was his name uh yosemite sam yosemite sam so i thought i had like yosemite sam in mind when i wrote this, like check the blam, blam, blam return values, right? NASA didn't quite put it that way. They had a more elegant way of saying it, but how many times,
Starting point is 00:40:32 okay. Think about this. How many times have you ever been bitten by code that makes some call, even a shell script, right? Or, or a command on the command line, you know,
Starting point is 00:40:41 in a shell where the call failed, but the return value that would have saved you wasn't checked. Many, many times. It happens to everyone throughout their career. It's just a thing, right? So the rule here is check the return values of everything that returns something. So in other words, if the method returns void, fine, you're excused this time, but always check them,
Starting point is 00:41:22 all of them. And they go so far as to say that if you explicitly want to ignore a return value, such as like if you did call it a printf in the example that was given, right, that would return back, you know, a result, you have to explicitly cast the return to void so that a reviewer of your code knows that you do not care about that particular return value. That's pretty interesting. And if you fail to either check a return value or cast it to void, it'll be brought up during the code review. That's pretty good. I mean, it's pretty awesome.
Starting point is 00:41:57 I think is what you meant to say, but also like as a code reviewer, think about like, now you have to have this like, you know, like memory map of like, okay you have to have this, like, you know, like memory map of like, okay, here are the functions that return back something.
Starting point is 00:42:10 And what that return type is versus here are the ones that don't return back anything. You know, it's very explicit now, you know, exactly. Yeah. But this is why I was saying like the,
Starting point is 00:42:23 the mental map thing though is like, well, what if it returns back like an int 64 and you're going to put it in like an int 16 space, you know what I'm saying? Like, you know, those types of issues that could come up,
Starting point is 00:42:39 come about, um, I don't know. I don't know how far they take it, but that was at least their their example was you had to check it and it might be okay if you're not like trying to store that into another that result into another variable but if you are putting it into another variable then that's where like you know type coercion could become an issue maybe i actually like this quite a bit i mean we
Starting point is 00:43:04 ran into something like this not terribly long ago from a bash script, right? There was a bash command that did something that was returning something that you didn't know about. And then it failed. You're like, why is it failing? Then you go look and you're like,
Starting point is 00:43:16 Oh, it has a return code. I wasn't checking it. Well, that's why, that's why I called out specifically. Like I was like, Oh,
Starting point is 00:43:22 like we could even apply this to shell scripts and things like that. Again, their examples and talk of this was more in regards to C, but I don't know. I'm sure they make use of some scripts on their, you know, it's probably all Linux underneath. It's probably got some crime job like restart, you know, whatever on Sundays reboot, you know, somebody reboot.
Starting point is 00:43:52 You have to remember to trap errors or else it's very easy to think something succeeded and it actually failed online. One, everything else just kept running. Yeah. So, uh, rule number seven,
Starting point is 00:44:04 the use of prerocessors, the use of the preprocessor is very limited. So this one is definitely going to be, you know, depending on like what your, your type of language is, right? So like in a JavaScript world, you're probably not going to come across this one. Although I don't know if node, if you're doing like server side node kind of stuff, if you can make use of any kind of preprocessor declarations, but I'm going to assume not since JavaScript isn't, uh, you know, compiled. All right. It's just interpreted, but NASA limits the use of C preprocessors to only file inclusions in very simple macros, right? And they have this quote in here to justify why. And the quote is,
Starting point is 00:44:53 the C preprocessor is a powerful obfuscation tool that can destroy code clarity and befuddle many text-based checkers, which was, you know, they, they were, their use of text-based checkers here is another way of them saying static code analysis.
Starting point is 00:45:13 But basically the idea here is that I don't know how advanced you guys are, how far you guys have ever taken pre-processor definitions, but you can, you can get pretty crazy with them, right? In terms of really muddling up the code, like what's actually happening here, right? So specifically, they call out conditionals that can change the code at compile time are called out as a no-no, right?
Starting point is 00:45:45 So they gave this example in the video that if you had 10 different flags that can be changed at compile time, then you have two to the 10 build targets that need to be tested. Makes sense. So in other words, those preprocessor conditionals can exponentially increase your testing requirements. So where I can think of this outside of C++ is you remember when we were like heavily talking about aspects and things like that? That's the same type thing, right? It's going through your, I can't even think of what it's called, your interpreted language, your IL code. And it would do what was called IL interweaving.
Starting point is 00:46:27 And that's changing your compiled code a little bit, but it's after the fact. That would be different. So I guess that's a little bit different, yeah. Aspects, I would imagine that it's not called out in the Power of 10, but I would imagine that that type of idea would be against what NASA is going after here. Because of the common argument against aspect-oriented programming is the obfuscation that happens. And you're like, well, I didn't even know that this other thing was happening before or after my code. So I would imagine that that would be a
Starting point is 00:47:06 frowned upon within nasa but here we're talking about like the the example that came to mind was in uh previous episodes i remember we talked about um i don't remember which episode off top my head but it was a feature flag reference and if def stuff is what you're talking about the pre-compiler stuff yes yes that's exactly what we're talking about here and we talked about like one of the ideas i forget which bookers or topic we were talking about at the time but it had it had called out the idea of using um these types of pre-processor flags as a way to turn off, you know, code that you didn't want live in production yet.
Starting point is 00:47:50 Right. But that way you could be shipping it. And if you wanted to test with it, then you could turn that thing on by the simple use of a, of a preprocessor definition, right? That's an example of what NASA doesn't want you to do. Yeah, that makes sense. A lot of sense. So rule number eight. Now think back to the pointer,
Starting point is 00:48:15 the heap one that we talked about before. Pointer use is restricted. So there was a quote here and they said, no more than one level of dereferencing should be used. Dereference operations may not be hidden in macro definitions or inside type def declarations. And this was an example of one that I was like, okay, wait a minute. Uh, you know, I had to think back to like, okay, what does it mean to dereference a pointer in, uh, in, in C for example. Right. And, you know, depending on like some of the answers are basically talking about like the, um, where was it? There was one, let me see. I want to quote this correctly. This one, uh, answer on stack overflow. Oh, I can't find it now. Um, you want to access the data value in your memory. Then that's the, that's the D reference to it, right? To access the value or to set the value of it. But what they're saying here
Starting point is 00:49:28 is you're, think about like the code, the, the, the, the syntax that you would write to access, to dereference that pointer, to, to set or read that value, Right. So in like a C sharp, I'm sorry, in a C language, you might use like the, uh, the arrow operator to get to that, uh, that value. Right. In here, the example that they gave is that you would, you would only do that dereference one time and set it to a variable, and then everywhere else you're using that variable inside to read it. Does that make more sense? And so that's what they meant by, like,
Starting point is 00:50:19 you're only allowed to dereference it the one time. Yeah, it gets tricky. I remember C++ and C being nasty in that regard. Like you could really shoot yourself in the foot if you didn't know what you were doing. Well, and that's, they specifically caught out. This is because pointers, you know, albeit powerful, they're easy to misuse. And so if you limit yourself to only dereferencing that pointer one time, right? Sure, you can use or change its value, but like you only get to do it that one time, then you like severely, you know, limit the times that you could mess up, right? And they also called out that the pointer restrictions aren't just to variables. They also include not using function pointers. And the reason here was because that can severely obfuscate the control flow of
Starting point is 00:51:14 your application, right? As well as make it more difficult for static code analysis of your application. So go ahead, Tracy. I was just going to agree with that. Like it seems like just having that one level of indirection is all it takes to like really screw with things in order to kind of point, you know, point them at things other than what you intended. Does it sound to you guys like they basically only allow functional programming at this point?
Starting point is 00:51:42 Like, yeah, that's what it sounds like. Okay. So it's funny you say that because I definitely heavily thought of that too. Like it's definitely, you know, if you're limiting the ends and the inputs and outputs,
Starting point is 00:51:57 like, you know what you can and can't do in it, then you do kind of get more into functional programming. And then by extension, that makes it easier to write test code around. Yeah. Right. Um, there's no state being stored anywhere. I mean, usually your state is stored in your heap, right? That's, that's kind of what you do with OO level applications and you can't use the heap. You're only using the stack, which means things
Starting point is 00:52:23 are getting added and pulled off every time, which means the only place where it sounds like there would be any memory for state would be the main control loop, right? So it sounds very, very functional to me just in terms of what they're describing here. Yeah, and this is how our robot overlords are going to work. They're going to be very fun. Math, all math. So think about this, though. How many times, how much code have you ever written or taken advantage of that allowed you to pass in a callback function?
Starting point is 00:53:04 Oh, lots. Yeah. Well, you were passing in a function pointer and you're not going to be able to do that here. Yeah, totally. Yeah. No JavaScript at NASA. Yeah.
Starting point is 00:53:13 So, like, that's why I'm saying, like, some of these ideas were, like, restricted to, you know, the language. Like I said, the preprocessor is an example. Like, you're not going to run into that in a JavaScript world, right? But some of these are like applicable to everywhere. And I thought that was a pretty cool one, you know, about like, you know, not doing function pointers. Cause even though in like a lot of modern languages, like
Starting point is 00:53:38 the Java based languages or C sharp, for example, like you don't really get access to the pointers. So you don't really think about them. Right. But function pointers, I mean, those happen. Right. So,
Starting point is 00:53:54 uh, here's number nine compile in. Let me see if I can pronounce this right. Pandemic mode there. I got it. Nailed it. First try. So the idea here is that you want to compile with all warnings.
Starting point is 00:54:13 And basically, this is the idea of treating your warnings as errors too, right? Wait, hold up. Hold up. You didn't seriously say the word the way that it was said, right? Podantic. Isn't that what I said? Yeah, I'm not sure which one's right. They're both wrong.
Starting point is 00:54:30 That's what I said. Say it again. Pedantic. That's what I said. What do you think I said? What do you think I said? Pedemic? No, I wouldn't have said that. That sounds silly. Pedantic is that's what I said.
Starting point is 00:54:50 My brain shut down like straight up. Like I was like, wait, you just, he kept going. Yeah. So compiling pandemic mode, this way you get the compiler.
Starting point is 00:55:02 We'll let you know all warnings, right? Cause all of the warnings are going to be enabled. So every time that anytime that the compiler sees anything that could possibly alert on, it's going to, it's going to issue that alert to you. Right. And treating your warnings as errors and address them before you release the code. Right. So, you know, I'm trying to think it was a good example, but like, you know i'm trying to think it was a good example but like um you know there's there's
Starting point is 00:55:27 times where like you've seen those compiler type warnings where it's like oh warning this could potentially overflow or something like that or you know i'm trying to think of like something that a visual studio or intellij might warn you of that like it lets you get away with some stuff is the point like when you have a line that runs too long like when you say when you say uh pandemic mode and your friend doesn't like say oh did you mean this you're like no that's not what i said that's not what i said a dantic that said it right the first time oh it hurts so uh but yeah i mean i know that like okay do you remember years ago we were working on a project where there was like an obscene number of of warnings just warning thousand no it was it was
Starting point is 00:56:17 a you know it was a strong five digit number my friend was it really? At some point we're like, okay, I think we're finally at a point. And it was years in the making. We're finally at the point to where we can turn on the capability, the pandemic mode where we could, we could treat these as errors and then make fun of our friends when they mispronounce a word live on the radio. I'm not, you know, not pointing any fingers, but if I was, I think you said it right the first time. I don't know who would do that. I'm sure I would have heard about it from somebody.
Starting point is 00:57:18 What did I really say? How did I say it? I swear. Aluminium. Aluminium. See, that sounds right to me i hear it and i'm like yeah yeah it sounds cooler for sure um you know what was interesting there was an example on stack overflow on this pedantic thing and and somebody was asking about that flag with antsy with the C++ type thing. And they said that like it'll complain about anything that goes over 509 characters because everything needs to accept that. And if you go over that, then not everything out there that compiles in that can do it. So
Starting point is 00:57:59 that's why it throws warnings, right? Or, or errors in that regard is because it may work right here, but it may not work on the next thing that you try and port this code to or this compiled compiled stuff too so it's pretty cool so uh last but not least at least according to the video and like i said uh some of these i didn't see um actually i'm taking a quick check oh so this is where it gets different so according to the video the last one was to just analyze and test your code and that at nasa they use multiple static code analyzer tools to do it because, you know, they don't all work the same.
Starting point is 00:58:48 Some of them will have different rules that they will use. And I think that we even ran into that as a recommendation before there was talked about. Oh shoot. Maybe when we were going through the DevOps handbook, maybe there, there was talking, there was talk of that before though, because, um, of this very reason, like depending on like how you would configure some of them and they, they would highlight different things. But obviously the big one here though, is to test, test, test, test, test. So preferably you're
Starting point is 00:59:23 using some kind of automated testing of your code, like unit tests or integration tests, but test it, test it, test it, test it, test it. Because literally lives could be on the line here, right? According to another one that I found, that one wasn't specifically mentioned, but one that was mentioned that we hadn't talked about was the codes asserted this. I'm going to read it specifically. The codes assertion density should average to minimally two assertions per function. Right. So again, like, you know, making it to where there's not like no more than two reasons why that,
Starting point is 01:00:13 that function could be like, Nope, we're out of here. Right. Only two reasons could at most could cause it to, you know, for there to be a, a reason to error out or to sort out.
Starting point is 01:00:26 But yeah. So, uh, like I said, there'll be a link to this, um, this video and yeah, I thought they were interesting. I like it quite a bit. We've, we've often said on this show, you know, Hey, we're not doing open heart surgery but what if you were right like this is the kind of stuff that that you would probably want to to take into you know consideration like yeah we probably don't want an infinite loop while this thing's doing something you know um yeah this this is pretty neat i don't know if a robot's operating on me. I might want an infinite loop while not done. Keep working. Oh man. So I don't know.
Starting point is 01:01:14 Open the other thread though. Yeah. Maybe your use case depends. I don't know. Right. Um, all right. So with that,
Starting point is 01:01:22 we head into Alan's favorite portion of the show. It's the tip. I had to throw you off there just to see. I was like, I've been doing it at the beginning of the show. What if I do it in the middle? Like what happens then? Yeah, I'm catching on. I've stopped the cold sweats and all that i think i think i'm growing nice uh so for my tip a couple years ago i mentioned uh an instrumental album that i really liked for a band called night versus called copper wasp and it was great i think it was 2019 maybe 2020 and i was really you know i was really excited about it i liked it i listened to a lot and it was great working music kept things moving and bumping and all instrumental, metal, whatever.
Starting point is 01:02:06 And now they've gone and released a new album like last week. So I just started listening to that. And I love it. It's great. You should check it out. It's all instrumental. It's great working music. And if you're a fan of Tool, the band Tool, then the bass player guest starred on one of the tracks, which was pretty cool.
Starting point is 01:02:22 Awesome. You should listen. Night version. It features Justin Timberlake. So that's, that's excellent. Yep. Yep. That's him playing bass.
Starting point is 01:02:29 It's great. Wait, what? It doesn't. You know what? I love how you just moved my letters around to make them line up with the line. He's a Justin Chancellor is the Justin Tim timberlake of the uh new metal world yeah i was just teasing but yeah of course i had to align okay so in what what what alan's
Starting point is 01:02:53 referring to for those that didn't that don't know in the background like we have our show notes you know in like this rundown format of what we're going to talk about and like there'll be somebody's initials next to a particular topic that we're going to discuss, you know, and it's not like we're reading necessarily verbatim. It's just like, you know,
Starting point is 01:03:11 here's the idea of what we're going to do. Right. And then that, that will become the input to the show notes that you eventually will see all pretty fine. And Alan, again, here put his initials on an empty line, this time in the wrong column.
Starting point is 01:03:29 I think this is payback for me not saying things the way we had been since year one. He's like, Mike's messing with my OCD. I'm going to mess up his CDO. Oh, man. Dude, my wife. So this is funny. There's not many things that get me like the show has gotten me because we're like 200 episodes and now we're gonna change it uh i walked into my bathroom the other night every drawer was open every door was open
Starting point is 01:03:57 and it's like everything i got to turn around and walk out of the bathroom like in me i want to go close all the drawers close all the doors like put everything i just but she actually looked at me she's like you're not gonna do it i was like no i'm going to bed wait did she leave them open on purpose to mess with you not not left them open open them all pulled them all out everywhere like all of them were open and i looked at it and i was like that's grounds for divorce right there that's i can't do this monster would do that i know man it was wrong it was wrong yeah i do the same stuff to my wife as uh she's much more organized me so nothing makes me happier than like misspelling something in a really dumb way on like the grocery list or whatever because i know like no matter how small it is like what you know whatever it is she's
Starting point is 01:04:43 gonna see it and it's going to drive her crazy. I'll frequently go to Publix and I'll see that she's scratched out and expelled it correctly. She just couldn't resist. If it had been me, I would have taken a picture of all of it. And then when she asked, why are you taking a picture? I'm like, well, this is exhibit A. This is exhibit B. Yeah, I need these, Your Honor.
Starting point is 01:05:04 That's amazing. That's all right. I'll go into her spice drawer and just move things around. She can't do it, right? Like, it's all alphabetized and all that, which is insane. So, yeah, all right. So, mine, I have a few. One of them popped up while we were doing the show because I went and searched,
Starting point is 01:05:23 and I don't guess I've shared this on the show. You mentioned the methods that are like 20 gazillion lines long, right? And, and there, you can't do a pull request on it because there's no context. You can't possibly squeeze all that into your brain. One of the things that I've found that I absolutely love, and IntelliJ specifically, and it's probably, my guess is, things like Visual Studio Code, probably all the other JetBrains tools, is you can actually view pull requests directly in the IDE. Now, the reason this is so good to me is if you go look at a pull request on GitHub, you know it shows you, I don't know, 20 lines on top and then 20 lines down below or whatever. And there's not enough context. And worse than that, unless you have one of the plugins set up in GitHub, it's right there with your project files and you can actually navigate to the other files by command clicking or control clicking, whatever your own windows,
Starting point is 01:06:30 Mac, whatever it is absolutely fantastic. And I find for me anyways, if I have not a tiny pull request to review with people, I can bring that down and I can more easily and more contextually show people, this is what I changed, right? And these are the files in the file system. And this is how it goes. Love it. Have a link to their, their page up there. And if I remember right off the top of my head, you can go up to get, go down to view and it'll have pull requests. And as long as you have it hooked up to, you know, that get area, then it'll show you all the pull requests and you can look at open ones you can look at them by author you can look at them by all kinds of tags so it's pretty excellent so only because uh you know of our our one true love here
Starting point is 01:07:16 get visual studio code can do the similar thing yeah i figured it could i haven't done it in there but that's awesome and also i wanted to point out like you were talking about the context in your pull request but you know or maybe you haven't like paid attention to it there's little up down arrows in the pull request so you can expand the context you can just keep clicking and eventually see the file yeah so so context here being limited to like that that file not necessarily like the project necessarily but even that file gets annoying right like i mean look if we all had files that were only 50 lines long that'd be amazing but usually they're not and and you keep hitting those arrows up and down and you're like man
Starting point is 01:08:02 really so but but it is good to have them there. So at any rate, love that, that if you haven't used it, it's one of the reasons why I do like get integration into some of the IDEs. I don't really use it to do much else with it, but it is nice to see those changes. All right. So one of our friends, John, he was on the show a long time ago. Was it 101? 100 and 101.
Starting point is 01:08:30 Okay. Yeah. So it's been a little while. He wrote us the other night and he's like, oh man, this is so cool. I downloaded the Lama AI model and did the same thing that you can do with chat GPT in the cloud. And I was like, I hadn't even considered it. Right? So if you didn't know, you can actually go download one of these large language models and run it locally, which is insane on even on a not so powerful computer. You can download these things and run them because they've already been pre-processed, right? So you can ask these things natural language questions and they'll work. So if you haven't heard of this, you can go to ai.meta.com slash Lama. And Lama 2 is their latest one. And one of the things that was interesting that John also pointed out was this is free for everybody to use.
Starting point is 01:09:20 You can use it personally. If you have a business you want to use it in, you can use it commercially. Like there are no limits. You can use it personally if you have a business you want to use it in you can use it commercially like there are no limits you can use it which is awesome it really kicks the llamas oh wait a minute i'll stop um so that was pretty cool well when i went to download this thing because i was like well now i need this because you know why wouldn't you want to be able to ask any question on the planet to this thing locally that led me to this thing that I'd never heard of. And I, and I'm going to feel silly cause I have a feeling that outlaws heard of
Starting point is 01:09:53 this. Have you ever heard of Anaconda guys? I have. Yes. Python. Yeah. Have you heard of it though? Yeah.
Starting point is 01:10:01 Well, I don't, I don't remember the deal though. Okay. It's been a long time so i used it but this was like the intro thing that you would use to get your data science environment up and running or your machine learning like tool base yeah running yeah i remember that with like the notebooks and stuff like anaconda seemed to be what they recommended yep okay so that is it and that'll
Starting point is 01:10:21 get your jupiter notebooks and all that stuff easy, but it's crazy the amount of stuff in this thing. So essentially they, they tout themselves as the way to get started with data science, ML or AI type stuff. And the reason is like, if you click on the download link that I'll have there, this is what they say. it has a free distribution install so it has installers for windows linux and mac which is that doesn't happen on anything which is pretty cool they have thousands of the most fundamental data science ai and ml packages um they manage environment so we've talked about sort of made fun of, Python virtual environments of the past. You know, I take it back. I take it back.
Starting point is 01:11:08 Make fun of it. Tell me about that again. This thing actually has its own virtual environment. So if you wanted to set up something that was running Python 3.8, you could have one environment over there. If you wanted to do something else that was totally dedicated to AI and whatever, you could have it set up another virtual environment over there. So this does it all for you. And when you download the thing, if you install it, it's tons and tons of tools. And it's got a really nice UI to be able to get you set up and running pretty quick. So very cool. But to take it even a step further, you don't want to install it on local, you got a Chromebook or something, you don't have that much room. You can also run this thing in the cloud which is super cool because when you do it in
Starting point is 01:11:49 the cloud they also give you five gigs of personal storage for free you're not paying for this you get a thousand daily seconds of compute i hate it that they said seconds because then i was like what does that mean it's about 16 minutes of high speed compute is what they say. And then you also have access to data science or yeah, data science courses, not, not, I don't know if they're all tons of free ones or what, but you have access to it. So if you're trying to learn, this is a great way to get your feet wet doing this kind of stuff. So, um, you know, go check all that stuff out. It's really fun. Yep. Okay. So for mine, um, this one is going to come from the world of, well, yeah, of course, Michael. Uh, so with that in mind, so for the rest of us that might not have been doing Java for the last 18 billion years, and especially if you come from a Visual Studio environment. So here's the thing.
Starting point is 01:12:55 In a Visual Studio kind of world, be it, I don't care if it goes way back to Visual C, C++ rather, or C sharp, I don't care, whatever. The point is, is that since the beginning of time, there's been this concept of when you do a build, it would only build the things that changed, right? And it's always bugged me that my Maven project in IntelliJ, and I'll go over there to lifecycle and double-click compile, and it's like, oh, well, let me start over from the earlier this week and one of the presenters there from gradle talked about uh cash build cash extensions and he specifically mentioned one for for gradle and maven but um sadly i only remember the one from Maven. But point is, is that both of them have this thing that you could super easily add to your palm file and then boom, you immediately got this build cache to where now your Maven builds act like Visual Studio does out of the box and only recompile the things that have changed or whatever tree you know causes
Starting point is 01:14:26 changes and not necessarily the entire thing over and over and over every time and so i know that like for those java developers are like come on michael that's stupid this one isn't for you just you know this is this is for the person who's just starting out in their Java development. And they're like, God, why does it take so long every time? Here you go. And add this. See, we're in the Java world. I have a feeling it's not going to be like, you know, you're stupid.
Starting point is 01:14:57 Why didn't you already know about this? It's going to be like, why aren't you using Gradle? That's the attack you're going to get. Yeah, yeah, you're not wrong there. And I really, if I remembered the Gradle cradle one i would include the link to it but um i didn't so i didn't want to like go in my haste trying to find it um because i was really trying to think back to like the the talk itself to see if i could find it but i came up short so i didn't i didn't want to like give one that I didn't know
Starting point is 01:15:26 to be correct. And then somebody say, you mispronounced it. Not that that would ever happen live. Not here, for sure. We don't do that. So yeah, that's the show. I was going to say,
Starting point is 01:15:41 if you're really talking with a group of job developers, they'll be like, why aren't you using Gradle? And you say, well, I tried Gradle. And they're like, oh, no, you've got to use Zable. It's like Gradle, but they fixed that problem. And someone else says, yeah, but no, really, there's actually two tools that replace that one. There's OpenZadal, and then there's Zadal 2,
Starting point is 01:15:59 which is just a fork of OpenZadal because the guy left. Anyway, it doesn't matter. You should use that. And you say, well, I looked at that but there were some problems. Some things couldn't get to work. Someone says, wait, why aren't you just using Maven? No, you go to
Starting point is 01:16:13 Zadal Enterprise. It actually has additional capabilities. And then the next version will be Zadal Boot. So yeah, it's all going to happen. And the cycle continues. Yeah. So, that's the show.
Starting point is 01:16:32 Be in. Bye. Go to our Slack channel. Just go to CodyBlox.net slash Slack. Do it. Do it now. Yeah, I don't know. What else?
Starting point is 01:16:45 That's fine. That's fine. That's good. We got links on top of the page for other stuff. We it. Do it now. Yeah, I don't know. What else? It's fine. It's fine. We got links on top of the page for other stuff. We do. Yeah. Yeah. Alright.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.