Coding Blocks - What is GitHub Copilot?

Episode Date: July 19, 2021

It's time to take a break, stretch our legs, grab a drink, and maybe even join in some interesting conversations around the water cooler as Michael goes off script, Joe is very confused, and Allen ins...ists that we stay on script.

Transcript
Discussion (0)
Starting point is 00:00:00 You're listening to Coding Box, episode 163. Subscribe to us on Spotify. Oh, wait, I forgot. Joe doesn't like it when I do this part of the intro anymore, do you? Huh, Joe? You don't, right? I gotta like be new with it, right? You're on mute, by the way, Joe.
Starting point is 00:00:16 I don't know if you wanted to talk to me or not. Maybe you're mad at me. Maybe it's because I'm calling you out right now in this part of the show, and you're like, dang it. Somebody muted me. I don't know what happened. But yeah, man, hot intros are everywhere. Let us know if you like warm intros. No, no, don't let us know.
Starting point is 00:00:31 Alright, moving on. You might want to know anyway. What? Did we just stop here? I don't know what just happened. Was this the intro? No, we're still going. Just go with it, and we'll figure it out from there.
Starting point is 00:00:49 All right, Jay-Z, it's your turn. Well, I don't know now. Maybe I don't want to. This is CodingBlocks.net, where you can find show notes, examples, discussion, and more, and send your feedback, questions, rants to comments at CodingBlocks.net. And you can follow us on Twitter at Coding Blocks, where we retweet sometimes. And every once a month, we might have some original tweet on there.
Starting point is 00:01:12 Or head to www.codingblocks.net and find all our social links there at the top of the page. With that, I am Alan Underwood. I'm so confused. I want it noted for the record that you two couldn't resist doing the normal intro. I corrected myself and tried it. It gave you the opportunity to move on. It needs to be there. It needs to be there.
Starting point is 00:01:37 This episode is sponsored by Educative.io. Learn in-demand tech skills without scrubbing through videos, whether you're just beginning your developer career, preparing for an interview or just looking to grow your skillset. All right. So, uh, I guess in today's thing, we're, we're kind of just, you know, gathering around the water cooler to talk about different things that are on our mind. So before we get to that,
Starting point is 00:02:04 we do want to take some time to let outlaw say thank you to those that have, have put reviews out there on iTunes. You guys love to try to get me on this. Huh? Okay, here we go. From iTunes. We have every Nick is taken 28 58 and mem knock 97. Well Mimnock, 97.
Starting point is 00:02:27 Well done. Well done, sir. And one of them said that we pronounced the word niche or niche incorrectly. I mean, how could that be? We say it both ways. That's right. All the bases are covered. Maybe it's nish.
Starting point is 00:02:41 We've never done it that way. Nish? Maybe it's nish. Nish, nish. Yeah, I mean maybe it's nash nash nash yeah I mean from the south yeah so but yes thank you for those reviews that hurts to just say it that way it feels so wrong Joe what about you you got you got a take
Starting point is 00:02:59 on it I'm still I'm still getting over the intro here I don't know where I am got my bearings such a train smash. A train smash. Harkening back to the days of Nick. That's amazing. Shout out, Nick.
Starting point is 00:03:13 All right. So Nick doesn't listen. He hates podcasts. That's not going to matter. So, hey, I said, you know, back in January or February that I was going to get the Moonlander review out. And I did in July. So, you know, the beginning part of this year was rough and it took some time to get back into not being rough. So that said, if you've been looking forward to, or contemplating getting one of the ZSA Moonlander ergonomic keyboards,
Starting point is 00:03:50 go check out the video. We'll have a link in the show notes. Also have, um, the other ergonomic ones, the Kinesis Advantage 2 and the, uh, why can I not?
Starting point is 00:04:00 The Zergotech. Also, we did those. So we'll have those up there. I wonder what that, uh, Moonlander warranty is. Do you know? It's two those. So we'll have those up there. I wonder what that, uh, moon lander warranty is. Do you know?
Starting point is 00:04:08 It's two years. It's in the review, sir. Okay. So you've got the first year of warranty. You got a year and a half left, man. It's not a year and a half.
Starting point is 00:04:15 It's not a year and a half. It has some miles left on it. You're good. You're good. Yeah. For those that don't know, it's actually outlaws keyboard that I was supposed to have for a short period of time to review, and it turned into a much longer period of time. So apologies. Do you realize when I ordered that?
Starting point is 00:04:32 It was in November, right? Or was it October? It was October. You didn't get it till November is what it was. I got it. I got it in November. Yeah. Yeah. Yeah. So that's what makes it so humorous. Yeah. It's been a minute. It's been a minute. Um, and then, and so some sad news here,
Starting point is 00:04:47 we were all excited. I think it was actually Jay Z that gave this tip of the week on the HTTP file extension in IntelliJ. And, uh, outlaw, do you know who wrote us on, on the show? Um,
Starting point is 00:05:00 I can find it real quick. Cause I did read it up. Um, um, but basically, uh, we were written on the show notes on the last episode, which is awesome. Thank you for sharing. That only works in IntelliJ Ultimate. Yeah, it's super sad because it's really an incredible feature.
Starting point is 00:05:20 But just go buy Ultimate. Did you already know the name and that's why you decided to ask me how I truly don't remember. No. Okay. I'm really going to butcher this one. I'm going to, I'm going to put the name. I'm going to give,
Starting point is 00:05:32 I'm going to share the name. Uh, how can I copy and paste this? Uh, email isn't playing nicely. All right. I'll figure out how to get you a copy of this. Oh wait,
Starting point is 00:05:42 here we go. Here we go. Here's, here's the name. And I'm going to try to do my best to pronounce this. And please forgive me when I butcher this. And this is going to be full America pronunciation. Cause I promise.
Starting point is 00:06:01 Um, thigh. Yeah. Good. Jen. No, that can't be right. No,
Starting point is 00:06:10 that's it. That can't even be close. Okay. Probably. I think I like yours better, but also like I'm putting like English sounding letters to the name and I'm like, that can't be right.
Starting point is 00:06:22 Well, regardless, you could, you can contact us and give us a pronunciation key and we will pronounce it right next time. But seriously, thank you for pointing that out because that was truly sad news to all of us when we saw it. So yes, if you want to use that, basically the postman within IntelliJ feature that Jay-Z shared last time,
Starting point is 00:06:45 you got to have ultimate. And, you know, if I will give this as a pseudo tip here, though, if you're contemplating buying ultimate, just buy the IntelliJ all tool toolkit because there's not much more. And you get every one of their tools included in that, which data grip is one of our favorites.
Starting point is 00:07:05 JetBrains also is a sponsor of the show and we give away free licenses basically every month if you sign up for the newsletter. So we don't get any money from it. It's just truly a fantastic set of tools. And when I say sponsor, that means that they give away free licenses. We don't get any money from them.
Starting point is 00:07:22 So they're really great. You can use that free license on the JetBrains All Product Pack. No, you cannot. No, you cannot. You used to. No. It's a single.
Starting point is 00:07:34 You can do it on IntelliJ Ultimate or you can do it on DataGrip or one of those, but you can't do it on the entire toolkit, I don't think. Because that's where you used to be able to. Really? That's the number one customer service issue. Well, I say customer service, but whenever I send someone one of those and they have a problem with it, it's almost always that.
Starting point is 00:07:52 That they're trying to get the whole kit and caboodle? Yeah. I didn't realize that wasn't a thing anymore. I know. Well, whatever. It's a bummer. But, yeah, speaking of that, we'll be giving those away, uh, just actually in probably around the time that this episode is launching. So I should join that mailing list.
Starting point is 00:08:07 Cause, uh, email's going to be going out with three new licenses. Oh, and the BS code extension still works. No ultimate there. Oh, cool.
Starting point is 00:08:16 That's, that's movie. Excellent. All right. So for this water cooler episode, we decided to talk about the benefits of drinking water. Yeah, we didn't. I prepared for the wrong show.
Starting point is 00:08:34 I'm sorry. Yeah, that's our exercise. Get fit developer podcast over on Channel 3. That's the one. Yeah. Go to the bathroom in there. That's where I could. channel three ah that's the one that's the one yeah yeah go to the bathroom in there all right well speaking of editors ids uh so a topic i brought today is github copilot have y'all heard of github copilot yes um is this the thing where you can like have visual studio code in the browser no okay good so uh so when yes one no um ally i guess you haven't been on twitter you've been on vacation for a couple days because you've been missing a storm i have
Starting point is 00:09:15 tried to stay off of all social media for a long time now okay well i'll try and distill the hot takes that have been going on. Can you read me your last tweet? I'll just text you all my tweets from now on. That would be great. That would be great. I'd really appreciate that. And all your Facebook updates. Yes. Okay.
Starting point is 00:09:37 So the deal is Copilot is a VS Code extension put out by GitHub, now owned by Microsoft. And it leverages machine learning in order to write code it's currently in limited preview so i signed up i've not been able to get in yet but you can find all sorts of people putting out youtube videos or gifs or whatever showing showing action actually the website does a good job showing exactly how it works too and it uses a a non-profit company called uh open api they have a tool called codex that is it translates natural language so that you'd speaker type in this case it only supports english so far translates it into code and github and open api work together and they also figured
Starting point is 00:10:20 out how to get code to kind of translate as well. And what it means is you can do things like write a function name, like post tweet, and it will start making available, almost like IntelliSense, the code that would send a tweet. It'll go ahead and even suggest libraries and modules that you may want to go add and dependencies you want to take on in order to do this. And it does this by first pulling in all of the publicly available code on github and using that to train up a giant ai or
Starting point is 00:10:55 model or whatever you want to call it and then it based on what you type in either in like docs you know like java docs or pi docs or whatever they call it or function names it will go and just you know kind of blast the stuff out based on what it thinks you're trying to do and it's scary how well it works if you watch the demos i haven't had a chance to try it so you know i don't know if it's just like you have to kind of stick to certain kinds of functions and other things don't really work too well but i have seen a good selection of things that people have been doing you know online and uh it's pretty funny you can get pretty niche and that's kind of problem part of the problem too so we'll get to the problem uh there's a i saved the contentious bit for the last i just want to kind of like
Starting point is 00:11:39 explain what it is first should i tender my resignation now or do I have a minute or like? That's the second part. Oh, okay. So, yeah. I mean, do I have to like, like some of the examples I'm seeing though, like, I don't know if it's just coincidence or if it was a requirement where like somebody commented above the function, like what they were about to do. And I'm like, how often do we do that? Yeah. Well, I mean, maybe we're supposed to.
Starting point is 00:12:04 But also I thought we were supposed to have self-documenting code so we weren't supposed to write those kind of comments well it's kind of funny so part of the you know people things people talking about like well like if i can you know write out precisely what i want the code to do like aren't i just coding like wasn't that exactly what coding is supposed to be is like a precise unambiguous language that could translate into machine code like that's you're just coding now you're just coding in english instead of whatever language but as you know this is really not gonna work out perfectly you know does it have to be english though because
Starting point is 00:12:37 english is such a fluid language that can change meaning so much i don't know if that's the language we want to be the universal language that we wrote we write programs in that is what they started with um but it also works for so if you look at some examples um you'll say they'll do like the function name so it might be like function uh reverse underscore linked underscore list and it'll just blast out a function to reverse the linked list and it will blast out the one it thinks you want based on like telemetry of what other people have selected based on you know whatever metrics they use to figure out what's best. You can also say, I don't like that one kind of suggests another and you can kind of cycle through. So it's not line by line.
Starting point is 00:13:14 It only does look at the text in the actual file that you're looking at. So it's not going to look at the rest of your code base. It's not going to look at your private repos. So now I have all of my code in one giant file so that it can get more accurate results and i gotta like write comments that are unnecessary because the function name was already self-documenting yep so now you've hit on the first point where i'm going to go is basically like how valuable is this and i don't know i haven't tried it it's interesting especially if you're thinking about someone who's maybe new to code or what if you're new to a language right and it kind of nice
Starting point is 00:13:48 to say like oh let me just type that you know i don't really do much python i need to do some mongo let me start typing something you know get user from mongo and now it starts blasting that out i don't know about code to kind of read that and take the suggestions for a library dependencies that it took and put in there and maybe just kind of tweak it from there, which is nice. But what if there's a whole bunch of developers doing this sort of thing and using a Git user for a Mongo
Starting point is 00:14:14 and there's a security problem or there's a defect in the way that we're doing this and now we all maybe have the same defect without realizing that there's like a pattern of a mistake across multiple, you know, multiple different programming languages.
Starting point is 00:14:28 And, and so that's kind of weird, but I guess we all have the same. We all have the same Linux bug. Yeah. And so it could never happen. Joe, you're hypothetical right there.
Starting point is 00:14:40 My heart bleeds for you, man. That could never happen. That's right. Oh, you know, for us to mention. So, um, you know, maybe you take it never happen. That's right. I forgot to mention, maybe you take it for granted, maybe you don't, but the model is not open source.
Starting point is 00:14:51 So all the code that they use to train this is public. Publicly available, specifically on github.com. But the model, what they got from it, not open source. Yeah, so the ML algorithm and all that stuff behind
Starting point is 00:15:06 the scenes is proprietary yep so just wait is that i mean because it's literally called open ai so open api is the name of the nonprofit ai oh uh oh i yeah sorry it is open ai i wrote the wrong thing so open ai is the non nonprofit company, and the product is Codex, which is the thing that translates. And GitHub is the one that worked with OpenAI in order to do this. And it looks like OpenAI does have tools that are. That's funny. So I was just Googling earlier. I did find some stuff on Open API, which is fairly different,
Starting point is 00:15:45 but yeah, so both, um, whether it's, it's also true. So open API, open AI is a nonprofit company separate from GitHub. It looks like they do some pretty cool stuff though.
Starting point is 00:15:59 And it's a company that Microsoft put $1 billion into two years ago. Also, the person from Netflix, Norman Reedus or whatever, there was kind of a joint venture there. Which is pretty cool. How correct is the code that it writes?
Starting point is 00:16:20 So, Google, sorry, GitHub did a giant test where they basically took some standard libraries from Python and tried to have it re-implemented. They would take the same function names and see what it would generate. And they said 40% to 50% were correct compiling code. And remember, it's almost like a Markov chain or something. It's generating code based on what it thinks you want. It's not compiling.
Starting point is 00:16:44 It's not tightly integrated with your IDE. It's generating code based on what it thinks you want. It's not compiling. It's not tightly integrated with your IDE. It's spitting out text. When you're typing something, it's like IntelliSense, right? You type something and it tries to generate that code for you. So maybe it's got some minor syntax errors. Maybe there's some problems with imports. Maybe
Starting point is 00:17:00 it doesn't pass all the test cases, but 40-50% I think is pretty good. Definitely better than I could do without. I mean, you'd think that the syntax that it would introduce would be correct. It just might not be functionally what you want, would be my expectation. You can imagine, like, maybe it doesn't do the
Starting point is 00:17:16 exact version. You know, maybe something was introduced in Python 3.9 that it doesn't know wasn't available in 3.9 and you're using 3.7. Because remember, it's not looking at your project as a whole. It's not interpreting your project. It's just looking at the file that you're in. I got you.
Starting point is 00:17:32 There's definitely some limitations. And remember, this is still new. It's in preview. Who knows where it's going to go? And after all the uproar, maybe nowhere. I don't know. I mean, code, writing code, or the computer's writing code, or, you know, the computer's writing code. I mean,
Starting point is 00:17:45 this is something that has been talked about for decades. So like, do I think it's going to go nowhere? No, of course this people are going to keep iterating on this idea of it. And like, that's, that's been a thing forever,
Starting point is 00:17:55 right? It's been an idea and a goal. Yeah. I remember, well, like when I was first running a program, they were talking about UML and how people were just going to do UML diagrams that would generate the code.
Starting point is 00:18:04 And then we're going to be known over developer jobs and so that's all we do now that was 20 years ago yeah yeah 20 years ago yeah just do drawings and that's it that's it well it sometimes feels that way but uh yeah so you know too it's like well tailwind css lets you you know just kind of do this or that and see your changes in real time. There's all sorts of tools now you can just drag and drop things. Like, you don't need to know HTML now to do nice looking blog posts in WordPress. Like, it'll, you know, the Gutenberg editor will try to figure out what you need. Like, somehow we all still have jobs.
Starting point is 00:18:39 So, I'm not worried about that. You know, low code, no code, all these things have been talked about forever. So nothing new here. Somehow the number of developer jobs keeps raising every year. So I think we're safe for now, especially with 40 to 50% accuracy on a limited test. Does work with small document functions. Does having the code written for you steer towards solutions?
Starting point is 00:19:04 So this is kind of like what i mentioned with the security problem uh you can imagine how if we're all doing like send tweet to whatever and it's kind of steering us towards the same libraries maybe that were in its training data set from may 2020 and maybe there's a better library where there's a way better way of doing things maybe you know the encryption method it's using is not so good. The model is going to have a bias towards older things and not newer technologies. Yep.
Starting point is 00:19:32 Because those older libraries and technologies and patterns or whatever are going to be what the model is going to find more of. And so that's what it's going to tend to go after is what you're suggesting. Yep. There's actually a really nice article. I've got a link down below that we'll have
Starting point is 00:19:48 in the show notes that basically talks about the different kinds of bias. It's not just recency bias either. It goes into all sorts of stuff that just is biased culturally or towards various program languages or integrations or libraries, all sorts of stuff.
Starting point is 00:20:04 All of these things are things that you have to be careful of. And now we're starting to get into ethics land where people start saying, well, if you're leading people down bad paths, maybe you shouldn't be leading them at all. All right. You've got to kind of questions like, is it doing more harm than good? I mean, on that note, though, you could say the tools out there that do scaffolding for you. I mean, Yeoman, Yarn. I think it was at Yarn. I think Yarn was one of them.
Starting point is 00:20:35 There's lots of scaffolding engines out there that have been around for a while that are really popular. How's that any different? If there was a bad pattern that was, that they were creating for you when you said, Hey, create me a controller file, right? Like if they were introducing some bad pattern and it was baked into the scaffold, that's really not any different except it doesn't learn. Somebody had to realize, Oh, this was a bad pattern. Let me go fix it. It's literally just a scaffold though. Like you have to go and fill in blanks. Like it doesn't do anything meaningful on its own. And it's definitely not suggesting like, Hey, here's this third party library that I'm going to like, go ahead and wire in for you to use.
Starting point is 00:21:15 Depends on what that scaffold template is though. So it could, right? Like, I mean, there's, there's really advanced scaffolding type things where it's like, I can't think of any off the top of my head, but like, let's say that back in the, the.net days where you needed to create a web view controller type thing. Right. And it could actually auto import things for your view, but they were all Microsoft.
Starting point is 00:21:40 They were all system dot something. Right. They weren't, they weren't like Newtonsoft dot whatever. But they could. So if you went to something like React where there have been Yeoman templates and stuff set up for that kind of thing,
Starting point is 00:21:56 I think it was React Boilerplate was one of the popular ones at one point in time where you could basically say, hey, create me stuff and it would spit out a bunch of files and it might have stuff in there, right? It depends on who creates those templates. And I guess that's what I'm saying is I don't see how something that's
Starting point is 00:22:11 learning and getting better over time is worse than something that statically scaffold something up that doesn't learn that you could have some bad things baked into, you know? Okay. Well, here's an idea that, that maybe then, because like like what if the things that
Starting point is 00:22:27 it's learning are based off like joe said it's not taken into consideration your entire project so what if your license doesn't align with the things that it's learned so you type in something and it picks a pattern from something that was like some other license yeah it was it was open source it was on github but the license isn't compatible with whatever you're doing, but it's going to go ahead and like stub in that, that, um, you know, that implementation for you, then what? Right. So that's interesting because I think that's one of the things that they address, right? I'm sure Jay-Z, you've got something in here on it. I would be surprised if you don't, but apparently this thing generates unique
Starting point is 00:23:05 code. So, you know, that whole, that whole thing on Stack Overflow to where it has a particular license. So if you copy something straight off Stack Overflow, you have to give attribution, right? Because that you have to put that, that license in there. Apparently what this copilot thing does is it doesn't copy the code it generates code that looks similar to but is technically different from whatever's there um which i guess helps it swim around those license constraints yeah and then we're definitely getting into the murkiness now because what people have done is they went and they would take methods from like the quake engine that might have some very specific method names
Starting point is 00:23:48 so it's a wake engine they just try typing in that function name and lo and behold it starts spitting out code that's almost identical to what was in the quake engine because it was probably in the only you know the only thing in that training set was anything remotely you know related to this stuff it It was like very specific, including like interesting comments with dirty words and stuff. So it's like very apparent that like, oh, this came from the quake source engine, like the source source code.
Starting point is 00:24:15 And so it's like, well, is it really then a derivative work or is it, you know, how often is it spitting out full source code from some other project? And there's not a way for me to know. There's no attribution saying, hey, we got this piece from this and this piece from that. So
Starting point is 00:24:29 maybe it is spitting out something whole and you're not going to know it unless you go search all of GitHub for it. Right. But hold up. I want to clear up something. Are you saying then that if the three of us all started a method that was like,
Starting point is 00:24:44 what was the example you gave? Get Mongo user or auth Mongo user or something like that? I forget what you called it. But let's say that authenticate to Mongo. We all created that. You're telling me that we all started a brand new file and we typed in literally line for line, everything was the same, but the implementation of that method, it would come up with three unique versions is that what you're saying it does it says that they try to generate unique code so it uh it tries to spit stuff out it's not like looking it up in a database or anything so you know i don't i don't know what really happened you know maybe maybe
Starting point is 00:25:19 there's some sort of randomizer where it takes like common words and stuff and it tries to kind of mix it all around but you can definitely get the sense that like they're trying to make it different. Not it's not happening organically different. Yeah. So basically they're not pulling code out of a dictionary like what he said. Now, I don't know if the three of us were to do exactly what you said outlaw, if we would get three different results, but maybe. But what what they are saying is you wouldn't get the identical copy
Starting point is 00:25:47 of what was already that it had used to train, right? Like if there was a four, I zero to 100 print, I it's going to generate something different than that code to give us, whether it would generate the same thing for all three of us, I don't know. That would be an interesting test. But it wouldn't spit out the same for I equals 0 to 100 print line. It would do something marginally different. I wonder if it would be smart enough that if it just saw, like, I create a new file in VS Code, and I'm like, fizzbuzz.py, and it's like, oh, I know where we're going. Enterprise fizzbuzz, here we go. I'm actually going to Google, like, GitHub copilot fizzbuzz here we go exactly you know i'm actually gonna google like github co-pilot fizzbuzz i bet you that someone's done that oh they should have if not we failed as a developer
Starting point is 00:26:34 society right well i mean yeah it's it's interesting. Then I guess, like, you know, do you encourage people to get a degree in computer science or just say, just get good at Copilot. You'll be good at Copilot. You're good. Just start typing in visual. Honestly, I think this is more like it's neat. It's it's it's trivial. It's nice. It's cool.
Starting point is 00:27:03 It's fun. But, you know, I don't know that we're going to use it to do our day job anytime soon. You know what I think it might help with is man, I want to bring up Ryan on here. Um, so our buddy Ryan monster, right? Who did the glyph friendrend plugin for Visual Studio. Anytime you can keep people from having to change context to do something, you're winning, right? So for instance, the plugin that he made for Visual Studio back in the day was if you wanted to use, what were those icon things? Font Awesome. If you wanted to use something like a Font Awesome icon in your thing, instead of having to go to fontawesome.com or
Starting point is 00:27:45 whatever the the website was and looking something up there you could do it directly in your ide i think that's what this is leading towards right is instead of you having to jump over to stack overflow or to go on to github and start searching for code and stuff you can sort of do that in your ide and have context to the types of things you're doing that's where it feels like this is is going to me yeah that's uh it seems like a stack overflow competitor more to more than anything else to me based on what i've seen so far wow i did not go there at all that's what it feels like just i mean think about that what if you were in the middle of something you're like oh man what i mean how do i how do i pipe this to me this seems like the next evolution
Starting point is 00:28:31 of like a whizzy wig editor we're like hey i'm gonna i want to form and it's gonna be about this big and i'm gonna drag a button over here and i wanted the button to hang out in the bottom right and it's gonna be anchored to the bottom right and i'm gonna here's a text field with a label like this feels like the next evolution of that right because you remember like in like a visual basic for example or whatever your visual you know choice back in the day was and then you could like double click on that thing that element and it would you know bring you up a function it would go ahead and stub out the function call to be like okay well here's the the method name and the inputs and the outputs of what this thing is going to expect.
Starting point is 00:29:09 And then you could like provide your own implementation to it. And like, you know, I remember back in the day, like in the nineties, like visual basic was awesome for that kind of stuff. Like you could put together some super simple UIs with no effort, man.
Starting point is 00:29:22 I mean, and yet they looked like every other windows application that was made at the time in the time, you know, that people might've spent, you know, hundreds of hours on and you're like, yeah,
Starting point is 00:29:34 I just threw this together five minutes, you know, like, so this, I just think this is like the behind the scenes kind of evolution of that. But this feels like this has more implementation because I know what you're talking about, like where you double clicked on something that would stub out the method, name it properly and all that. This feels more like I need to figure out how to read a file
Starting point is 00:29:53 from disk and Java, you know, type in function, read file from disk, and it's going to automatically tell you, hey, you're going to use the file system object. You're going to do this. It's going to stream the bytes and you're going to have an file system object. You're going to do this. It's going to stream the bytes and, and you're going to have an implementation that works. That's, that's pretty powerful. I'm not saying it's, it's, I think to what Jay Z had said a minute ago,
Starting point is 00:30:16 where it sort of leads the witness in a certain direction, it might lead you down the wrong path. And if you don't know that path in the first place, you might go the wrong way just because, hey, it suggested, hey, this looks right when there were other or better ways or whatever. But it still feels more complete, more fully baked than those old ways. I'll say too, reading and writing a file is a great one. Especially in Java, I always have to look up
Starting point is 00:30:43 how do I read a file? There's somehow three or four classes involved every time, even for simple use cases. And that's something I'm sure it's going to do really great at. What it's going to be terrible at is we used a Mongo example, but imagine say I get a user from Mongo database and it goes and figures it out and dumps it in there.
Starting point is 00:31:00 Well, you probably already have a way of connecting to that Mongo database somewhere else in your code. Unless you're just straight up only doing one touchpoint with Mongo or, you know, you probably already have places you should be using, you know, code for authentication and doing similar things that are much more consistent with your code base. And you're going to have this thing that looks like a copy and paste from someone else's code just sitting there. And so that's probably not something you're going to want to leave like that. But it might be good for learning or, you know, kind of figuring out what needs to happen or prototyping,
Starting point is 00:31:27 but it is scary to think that you just leave it. So I don't know that it's really designed for you to just bring into something and just leave it like that forever. I think it's like, it meant to be a kind of help, but we kind of had to see how people actually end up using this thing. I could see you using this to learn, but not for production. Cause like what you're saying, like there's so many patterns and everything that this thing isn I could see you using this to learn, but not for production.
Starting point is 00:31:45 Because like what you're saying, like there's so many patterns and everything that this thing isn't going to know. You know, if you have a DAO or repository pattern, it's not going to know, you know, like every other pattern that might be, you know, in your code, like every other bounded context,
Starting point is 00:31:59 you know, it's not going to know, oh, you had an interface for this because like you said, it's not going to look at the entire solution. It's just looking at that one file, and I just happen to name a method like add two numbers. Like, okay. So, I mean, I am kind of curious to see how advanced can it get because in trivial kind of examples, like add two numbers, then sure, I could see how it might be able to figure that out. But in the more complex things, I'm curious to see what it does.
Starting point is 00:32:25 But like you said, like, I can't imagine that, you know, it'd be code you'd probably want to leave in your production app. What would be interesting is when it doesn't just look at that one file, right? And it looks at your solution, your project or module, whatever. And it's like, oh, I see what you're doing here. You guys are using this pattern, you know, here's, here's a full blown template for the next thing that you're trying to do. Is it going to pull all your source code up to the cloud to process that? That's where people are going to get mad. Right. But that's also like, that's where things that
Starting point is 00:32:57 like what Apple have been doing and, and even, uh, Google with their, their phones and stuff where they built in the machine learning chips on the phones and stuff. I think we're going to see a lot more of that in computing as time goes on, where you'll be pushing workloads to these coprocessors in your hardware that do a lot of this stuff, right? Like the algorithm will ship to you and then it'll do things locally for privacy concerns. I think that's where we're headed with a lot of things. And real-time updating of models is not trivial. They did mention that part of the delay in rolling this out to more people is limited specialized hardware.
Starting point is 00:33:37 So I imagine that would be part of it. But if there's enough of a demand, who knows? So it's an interesting experiment, I think. But I would say social media, media twitter just people developers have had a pretty i would say negative attack on this and i don't mean negative like they're wrong or bad or they would just like people have been pretty upset about this and part of it's been things we've touched on today but a lot of it has been just the ethics so uh it's been trained on what they call billions of lines of source code i found a an article which is an old article that mentioned, um, just for Python, uh, 54
Starting point is 00:34:08 million public software repositories, 179 gigs that they trimmed down to 159 gigs by removing things that look like generated code or like cutting off long lines or long files that look like for outliers. Um, so that's pretty big, but, uh, do they have to ask to do that? I mean, if you put it out there on GitHub publicly available, why would they have to? I can put it on GitHub and say all rights restricted. I can put it up as GPL. But GPL just means copy left, right?
Starting point is 00:34:42 Like that's different. I mean, they're just reading it, though I mean, they're just reading it though. Yeah, they're just reading it. So how's that any different? So I don't understand. You put it up there, all rights restricted, but yet you make it publicly available for me to read. I would think, but there's a difference between like a person kind of reading it, learning it, and a computer going and then distributing that knowledge nearly line for line. So here's where, well, let's take away, let's hold on that line for line bit.
Starting point is 00:35:10 But let's take this in a different way. Because one way to think of machine learning models, I mean, we've been talking about design data intensive applications a lot lately, right? And indexes. All a machine learning model is is a different form of an index. It's just one that's more complicated to, you know, depending on the size of your data, it can be a little complex to crunch through it. But it's nothing more than another form of the index, but in a mathematical kind of way. You're trying to like represent all of this data into some kind of a function and that's it.
Starting point is 00:35:47 Right. So there is the representation of the data there in some form, you know, and it, but, um, I lost my train of thought where I was going with that. Oh,
Starting point is 00:35:58 um, you were talking about the, um, Nope. Gone. Licensing. Um, well, that's why I was saying like, like hold off I was saying hold off on the line for line bit because that's probably not – I would expect that to not be so much the case that it's going to be line for line exact.
Starting point is 00:36:17 Yeah, it's supposed to not be. But the fact that it is like learning off of something that if it is all rights restricted – and maybe that and maybe that was like some of the, you know, maybe that's why it was only 54 million public repositories. Maybe there were a total of like, you know, 154 and they like, well, no, all of these have license. We can't look at. So they did come out and they haven't confirmed that they did not look at licenses and people have found that there are licenses that are like GPL.
Starting point is 00:36:44 I haven't heard anything specifically about like an all rights restricted kind of license but they did say that um and i've got i think about a link or two down there too where um that they have allegedly confirmed that they have included projects that have gpl licenses which are you know copy left it's not wrong but uh the kind of question arises like if they're spitting out things that learn from those projects, you know, I, of course I have an opinion.
Starting point is 00:37:09 I don't like, I kind of feel like you do. It's like as a programmer, I constantly look at other people's code. I learn from it. Sometimes I take examples and I slightly tweak them and I kind of spit them out somewhere. And that's how I learned to code.
Starting point is 00:37:20 And so it doesn't seem that different to me, but Twitter and Reddit and hacker news have had a very different take on it. So it's been surprising that different to me but twitter and reddit and hacker news have had a very different take on it so it's been surprising to me to kind of be you know on the other side of this kind of watching other people feel different about it it seems it seems similar um okay so there's the if you have the acm subscription there's the magazine that they um these give out like every you know couple months, communications of the ACM. And in one of the recent issues, there was an article where somebody was surmising the Oracle versus Google debate in that lawsuit and everything.
Starting point is 00:37:57 And basically, this was after the judge had already rendered a verdict that was in Google's favor. But this sounds kind of similar to that because part of the premise of that article was saying that it was like, well, you know, the signature alone didn't matter. The fact that, you know, they wrote their own implementations is good enough. And, you know, one set of code written for Android doesn't necessarily expect to run on every version of Java and everything that was written to run on Java doesn't, isn't necessarily expected to run on every version of Android. Uh, and, and so, you know, just because they kind of might seem similar in signature doesn't necessarily mean
Starting point is 00:38:34 that they're the same. And it was like this whole API kind of conversation about like, you know, are, are those actually, um, you know, protected and patentable and things like that. So I take that tangent because this kind of reminds me that if I write a method signature and it's like, oh, well, then I can figure out like, hey, I should go and implement this thing. Well, if you're telling me that the implementation is going to be different for me than it is going to be for you and for Alan, then okay, who cares if we have the same signature? Yeah, because the judge already ruled. So basically what you're saying, and I haven't followed this thing, but what you're saying is
Starting point is 00:39:09 the judge basically stated that an API or a contract you can't patent. You can patent the implementation of it, but you can't patent the actual signature. And if that's what we're saying, that's kind of what this whole thing is right here, right? You can create the same exact function name, but the implementation is going to be slightly different. Who knows if the compiled bytecode will be the same? But on the surface, the actual code that made it happen will be different. So it's fine-ish. Yeah, I'm not a lawyer. That's kind of the question some people had.
Starting point is 00:39:42 It's like, well, if I have to worry about line by line or even if small portions are identical, if I have to worry about it, like as a, you know, say like a director or something at Google or Microsoft or Netflix, you probably just say you can't use it. Right. Like just avoid the problem entirely. And so, you know, are people going to kind of stay away from this just because they're afraid that there might be stuff that sneaks in that they didn't want to you know is the benefit good enough for it to warrant that risk and you know it's interesting the three of us have been involved and have seen the output of code analyzers like there are tools out there if you're a company or somebody that's, that's interested and you have the money and you want to do it,
Starting point is 00:40:27 you can actually take your entire project source code and feed it through one of these analyzers. And it'll tell you if it finds anything on stack overflow or on get hub or whatever. And there'll be like, Hey, um, you probably need to provide attribution here or this license is restrictive
Starting point is 00:40:43 or whatever. Like there are actually tools out there that do that so it'll be interesting to see if anybody runs that kind of stuff against which generated from from copilot to see if it if it finds any hits right like if there's any kind of matches or anything that come up can you imagine trying to explain that to your boss i didn't copy that from second i didn didn't even write it. That's right. I hit a few keys, and it plopped it all in there. You know, the next iteration of Copilot will be when it does its own git commits.
Starting point is 00:41:15 That's awesome. You know what's going to be amazing is kind of going back to what you guys said, is when you have like 10 different files that you coded, and they've all got different types of Mongo connections in them. Yeah. That would in them. Yeah. That would be amazing. Yeah, I was thinking, have you ever seen one of those articles where like a security analysis team will take an open source project
Starting point is 00:41:32 and they'll do an analysis on it. And they may not ask the people who put the code out and that code may not be a permissive license. But all they're doing at the end of the day is coming up with a couple of pie charts and like lists of things that they found that they thought were dangerous or something. And the question is, is like,
Starting point is 00:41:47 is it ethical to use someone else's data to train AI or write an article or put together some pie charts? And I kind of feel like the, you know, prior art, like it seems like a lot of people do that on the internet and we're all fine with it. Right.
Starting point is 00:42:02 That's like every day. I was going to say like, how do you, where do you draw the line and we're all fine with it right that's like every day i was about to say like how do you where do you draw the line because like how much how much ml is based on like training on faces for example uh yeah i mean several of the acm recent issues the acm have been talking about like the ethics of uh machine learning and biases in some of the models and everything you know you can't even you couldn't even do one based on, uh, on, on land without that being somebody else's property. How, where would you draw the line of like, Hey, it belongs to somebody else. You don't have the right to like train your machine learning model on it unless you own
Starting point is 00:42:37 every bit of the data that you're training on. That's the world would never go for that. And it's already too late. There's already too many uses of it where, where, uh uses of it where models are being based on publicly available data. Even like look at self-driving cars. They wouldn't even be able to exist without being able to train on publicly available data. You know what the difference is? The difference that people are going to call out is it's like having Johnny Five read through the dictionary
Starting point is 00:43:01 or Neo learning something in the matrix where he plugs in. We can't learn that fast. We can't come through code that fast. And so the only argument is that you've got this, you know, network of supercomputers that can, that can do all this and comb through every line of code out there and do it. And that's the only argument.
Starting point is 00:43:20 It's a human versus a computer, but they're both doing the same thing. We've been hearing this crap argument, though, for our entire life. It's literally, Arnold Schwarzenegger made an entire career off of this premise. It's all we've ever heard about. It's like,
Starting point is 00:43:35 oh, well, as soon as quantum computing comes out, forget about it. It's all over. The machines are going to take over. The rise of the machines. It's like, oh, God, I guess grab your Windex and let's kill some robots. Windex. Yeah. So I have a hard time. But if you look on Twitter, you absolutely will see people raging, talking about class action lawsuits, saying that they need some sort of cut of the money that GitHub is making money off the code that they use.
Starting point is 00:44:06 And that's kind of my thing is like, I don't expect a cut of Google's revenue because they index my blog in order to help people find my blog. So yeah, I mean, how do you rule what's available and what's not? But it kind of ties into a lot of privacy questions over the years that have been coming up
Starting point is 00:44:19 about whose data is it and what can people do with your data and how do you protect yourself from that? And it seems kind of like, yeah, if you put it out there public on the, on the internet, good luck.
Starting point is 00:44:29 If you put your code on GitHub and then you're concerned that somebody is going to go and use your code or ideas from your code, then maybe you shouldn't have put your code on GitHub. I was going to say, you know, it's what's kind of ridiculous about this. If we're all being honest here is people carry around smartphones. Almost everybody you know carries around a smartphone. And by doing so, you've basically opted in to
Starting point is 00:44:51 people using your data, right? Like, I don't know how people are going to get up in arms about using a free service. If you don't like it, then pay for a GitHub account, right? Like, read the fine print. Usually if you're getting something for free, it's not for free. Just know that, right? Like, um, read the fine print. Usually if you're getting something for free, it's not for free. Just know that it's that simple. This is where I thought you were going, Alan. And so let me correct your argument for you. All these people that are complaining, ask them how, how, uh, active they are on Facebook or Twitter or Reddit or insert social media platform here. Really? You are being mined. Your data is being mined, and it's no different for your code.
Starting point is 00:45:34 If you're not paying for the product, you are the product. Yeah, exactly. And in all honesty, everybody should by now understand that, especially as a developer, you should understand that. And so I got you skipped over the quake thing what were you doing there I just mentioned that earlier and so I got a little snippet there so if you watch it you can see where someone actually got those comments and
Starting point is 00:45:57 got you know a pretty almost exact replica of quake source code which was gpl so restrictive license something you have to be careful of. It's a proof of concept, so they went out of their way to find something like this that would kind of trigger this, but it just kind of brings it up that it could happen.
Starting point is 00:46:15 And so, yeah, I was just kind of wondering with all the talk on Twitter and stuff, if people would have felt differently if the model was made public. No, no, no, you mean the algorithm, right? You don differently if the model was made public. No, no, no. You mean the algorithm, right? You don't mean the model.
Starting point is 00:46:28 You mean the algorithm that makes the model, right? So I meant like they literally publish the data you would need in order to, you know, I guess there's kind of two parts of it. One is like the predictive test, and the other is like actually spitting out the text and finding. I don't know how it works, but, um, yeah,
Starting point is 00:46:46 I was thinking like whatever, whatever it takes, the data that they, the result of the data that they processed, if they published that, would it be different? So if everybody had access to the ML models that were generated, I imagine that those models would be,
Starting point is 00:47:02 have limited life though. I mean, I imagine that they're very transient. They're going to like, have limited life though. I mean, I imagine that they're very transient. They're going to like, they're constantly updating. I mean, just think about like what we do, right?
Starting point is 00:47:10 I mean, we're constantly updating ours. Yeah. But, but I guess, but I guess though, to Jay-Z's point, and it's,
Starting point is 00:47:16 it's an interesting question right now. The only use of that is this codex thing, right? This copilot thing. What if you as a developer could use the same data that this thing's generating and you could do your own implementation type stuff with it? That's kind of what you're saying.
Starting point is 00:47:32 If we could all use whatever this thing's generating, would everybody be fine with it? It was kind of some weird case where people don't have licenses now that say, like, people can use it, but AIs can't. And so it's kind of like this weird edge case where something, or not edge case, but something new came along and used data in a way that we hadn't thought about 20 years ago when a lot of these licenses were in so it's just kind of
Starting point is 00:47:53 a you know it's kind of weird it makes you wonder it's like well would people have felt differently if the data was public that they used to make it and the result was public it sounds like the answer is kind of no we people would probably still be not too happy about it i really think though that what we're we're really talking about is like the algorithms that were used to create the model and the code that created the model because like i can't imagine trying to use some other model that was randomly created by some other code that i don't know anything about i don't know what data was trained on i don't know how it was trained don't know what data it was trained on. I don't know how it was trained. I don't know what it was used. And yet I just going to like randomly try to load it,
Starting point is 00:48:28 load in this binary blob and be like, yep, go ask it this. Does that use law and so on? Okay. I mean, because at that point, like literally go back to what I said that the model was going to be, right? Like you're trying to take in,
Starting point is 00:48:41 you know, to dumb down machine learning, you're trying to look at a pile of data and then make a mathematical function out of it. Right. Well, how do you know what, like what parameters to pass in and like what to even call it? Like what the value of that, if I, if I give you a random math function and I say, uh, the, the function is called X and you're going to pass in, uh, an integer a float, and it'll return back a double. Without knowing what I made X based off of and the inputs and outputs to do, that function alone, how does it have any value to you? That's the part where I'm having trouble trying to understand what value the model itself would have to anybody else.
Starting point is 00:49:25 But I could see value in trying to understand like, Hey, how did you create that thing? And maybe that's what we would want to iterate on. Like maybe I don't like how you, how you got there and I want to do my own thing that might be a derivative work of that. I think the, I think that might be too technical. I think, and correct me if I'm wrong here, Joe,
Starting point is 00:49:46 I think you're talking about more like if there was some sort of service that you could use. So I know Azure has AI things. They have their pretty famous how old am I type thing, right? Where you can upload your photo and it'll tell you, hey, you're obviously 21, right? Yep. So being able to use something that would give you the output from there, I think that's kind of what you're getting at, right? Like if everybody had access to use this thing, would it be okay? Is that more what you're getting at? Not necessarily just the raw data because to your point, Outlaw,
Starting point is 00:50:20 you're not going to know how to use it. But if you had something that you could say, hey, I want to consume what this thing should be giving me. Yeah. People are kind of saying like, hey, you used public data to get this. We should be able to use what you did. Which I don't understand the argument. And I don't understand what you're saying behind it.
Starting point is 00:50:38 That's what you're saying. A public API around it. Public API or maybe, you know. So they're just going to say like you built this off of public works and then you locked, you know, you put a lock on it. Public API or maybe, you know, you built this off of public works and then you locked, you know, you put a lock on it. You know, I have a problem with that, though. So Jay-Z, you've been playing with the Rainforest
Starting point is 00:50:54 API. Yep. They built that off of something that's more or less free. Well, it's not theirs. How about that? It's not that it's not free because it belonged to Amazon. Right. Yeah. Right. Totally. It belongs to Amazon. They wrapped it to make it better. And they charged a
Starting point is 00:51:09 hefty sum for it. In the initial episode where Jay-Z introduced us to Rainforest, there was another API at the time and I don't remember the name of it, but it was based on looking at the globe and getting satellite pictures, right? Those pictures didn't belong to them. They didn't even put the satellites up that took the pictures.
Starting point is 00:51:27 Right. But they're using publicly available data to then charge and make a service for you. So, yeah, I don't know. The argument of making the co-pilot API public is kind of – it's weak to me at least as far as i know of it right based on this conversation yeah i agree yeah don't be mad because somebody went and did something creative with stuff that you didn't expect right to be used that way like that that's it's the old adage don't don't hate the player hate the game that's right i feel like I mean, literally all the data was publicly available. And so there's nothing stopping you from going and doing this other than maybe rate limiting,
Starting point is 00:52:10 which I think is reasonable to expect that you can't just get an entire gigantic database of our data dump of all the source code. I mean, it is up there, though. In terms, I mean, so now I'm countering myself because what was that company? Oh, man, there's a company and I can't remember. And they took the court case to like Idaho or something like that, because like it was either Idaho or Illinois or Iowa. One of the I states where they their law is way more restrictive as it relates to personally identifiable. And so basically there was this company that started this, that was scraping publicly photos from Twitter and Facebook or whatever, all the different social media platforms.
Starting point is 00:52:56 And they were doing facial recognition. And then they were selling it as a service to law enforcement to where law enforcement could be like, hey, we have this picture. Who is this guy? And it would run into the system. We're like, oh, we're 98.7% sure that's Joe Zach. And you should probably go check him out. Here he is on CodingBlocks.net. And here you can find him. He looks Metallica. And like Twitter and Facebook and Instagram, they immediately put like cease and desist letters out to
Starting point is 00:53:23 the company saying like, nope, you do not have, uh, you know, our, our terms of service specifically, um, prohibit scraping services of, of our content. Uh, you're, you're going against our terms of service. You, you have to cease and desist. And of course it went to court. And like I said, one of those States, uh, forget which one it is, but it's one of the I states, had very restrictive law as it relates to being able to use a picture of you without your knowledge for some other reason. Right? And so that's where that particular state now is getting all of these court cases that are like this are going there. And so far in the, in the guy who started the company too,
Starting point is 00:54:09 he was like, you know, a young 20 something year old guy. Like, you know, he, he wasn't very old at all. And,
Starting point is 00:54:16 uh, you know, he was in like, you know, on Bloomberg and, you know, all the different networks. And,
Starting point is 00:54:21 um, um, but yeah, they, they started shutting him down there because of it. And he's been fighting it. I don't remember where that ended. That's interesting.
Starting point is 00:54:31 The point I was making is it kind of goes like that, where in this particular case, it's GitHub scraping their own content. I'm sure if you were to go read through their terms of service, you have nothing to say to them, right?
Starting point is 00:54:47 Like you, you gave them your code, right? You gave them a copy of your code and I'm positive that somewhere in their terms of service, you probably even got an email in the last, you know, 12 to 24 months that said,
Starting point is 00:55:01 Hey, we've updated our terms of service. And you know what you did? You ignored it, but it probably had some verbiage in there that said, hey, by the way. Yeah. Yeah. And what's funny is if another company had done this with data on GitHub, I still don't think I would be mad about it. I wouldn't care. If you're doing things that improve a developer's life as a developer, you should be pretty happy about it.
Starting point is 00:55:26 I don't know that I'd be mad about it. But the point that I was making with that example, though, is that it could be going against GitHub's terms of service in that case. And in which case, there could be a legal case to shut it down. Yeah. So we'll see. It's interesting. It definitely looks like a new kind of tool. It reminds me of self-driving cars a little bit or you know your first uh you know people's initial reactions to self-driving
Starting point is 00:55:48 cars were like very mixed right some people were like heck yeah this is amazing i'm never buying another car again and other people were like oh i just put a stop bumper sticker on my car and now causing accidents behind me you know because they're that's hilarious i never even considered that oh yeah yeah people are like like have a shirt with a stop sign shape on a red octagon and all of a sudden cars like it's so funny to me like i mean without going too far into that particular thing it's just amazing to me that people are anti that kind of thing considering how many people drive staring at their phones all day like you're telling me that the car is going to be worse than you are as you
Starting point is 00:56:26 drift off the road. And as you break five, 500 yards too early because you were staring at your phone. Yeah. I don't know. Necessity of change. Maybe that's true. I guess I just thought it'd be cool to talk about that.
Starting point is 00:56:40 We'll, we'll see where it goes. Good topic. Great topic. All right. Nothing's so fair now. Yeah. i think it's all downhill from here so um which i've always wondered about that saying you guys ever thought about it isn't it that's great yeah i love downhill yeah downhill you can roll down a hill if you're younger yeah when you get older it hurts the hard part i think you're younger, when you get a holder, it hurts the hard part. I think you were using the expression wrong.
Starting point is 00:57:07 No, no. Cause it would be all uphill. If it's hard, it's all, it's easy. If it's all downhill. No,
Starting point is 00:57:12 no. Like after, when you pass 40, you're over the hill, right? Like you've, you've topped the hill. It's all downhill from there.
Starting point is 00:57:19 Like, I don't know. It's weird. Yeah. Do you think? Oh, we found the pole. Yeah.
Starting point is 00:57:25 Anyways. All poll. Yeah. Anyways. All right. That's a good point. We have a new poll. All right. So the three of us have dealt with this over time. And now, especially, we work in tech stacks that are diverse, right? Like we have all kinds of things in our stacks, document databases, search engines, relational databases, streaming engines, like all kinds of stuff. Right. And it can be tough.
Starting point is 00:57:55 Like it can be really hard because as you start building stuff, if you don't put in the right abstractions, you always need this infrastructure stood up to be able to do even the most minute of things. Right. And so it's brought up conversations about, well, how do you fix that? Well, you abstract some things. And so that made me wonder what was the right level of abstraction, right? Like, I think that a lot of times we can agree that having some sort of API that your applications talk to is really good, right?
Starting point is 00:58:34 And having those APIs, if you say that, hey, I want to get some user information, that thing might abstract away from the fact that you have information stored in Mongo and information stored in Postgres and information stored in Elastic, right? That's awesome. Go get me the information. It knows how to go do it.
Starting point is 00:58:52 So your application that needs to get that stuff doesn't have to go talk to those three different systems. You have an API tier that does that for you. And so anybody can talk to that API, assuming that it can authenticate to it and go get those things. My question for you is what can you abstract and what can't you, and is there a point where you draw the line and you say, it's not worth it. It doesn't make sense to abstract it. So I'll give you an example. and then we can go from there. Databases like relational databases are pretty well-known entities that you can abstract typically with something like an ORM, right? Because they have these schemas that are known that you can read from and these technologies make it kind of easy to do that stuff. But what about... Save or new or create a read,
Starting point is 00:59:47 right? All your crud operations you can take care of easily, right? Um, and maybe if you want, you can even wrap a graph QL, you know, schema type thing around it as well.
Starting point is 00:59:57 Like there's, there's a lot of things you can do because it's a very well known structure. What about when you get to things like elastic search, where you're dealing with objects that you're doing projections on, like aggregations and crazy filtering and all that kind of stuff? Yeah, so my kind of thought here, Spoonraker talked me into this, was to abstract more around the feature and not the technology.
Starting point is 01:00:22 So you don't want an an Elasticsearch layer or like a search layer or, you know, whatever you might want to call. But you might have a way to say get products. And so you can kind of stub in something there, which I like. So I know you're going to use the thing I just said a second ago. Yeah. Very similar. Okay. That's fine.
Starting point is 01:00:40 That's perfect. I actually like that a whole lot. Right. Like here's the functionality here. Here's your bounded context, we'll call it. I have customer service features that I need to make available. What do you do about a technology like Kafka? Yeah, and so I got a little preview of this. I got a little head start. So Kafka in particular is tough because you kind of
Starting point is 01:01:05 end up writing your app around it it's like it's either probably a producer of messages and a consumer of messages and it's not like a it's a proprietary api basically to kafka it's a specific to it and just the way it works the way it interacts with your program changes the whole thing so you're typically doing things like processing an event at a time and you're relying it for doing the batching and stuff and streaming. And so you really do write your whole app like around this. And it does kind of take on a more of an infrastructural feel where you, it's not really a feature.
Starting point is 01:01:37 It like, it is the thing. And so I, I don't, I don't really know the answer other than trying to keep that whole thing separate and so have your producer app be a little app that's away and then you can reproduce the whole app or you know swap out the whole app with another one but we're talking about the app in this case where it's like heavily reading and writing to and from Kafka is the part of the ETL process.
Starting point is 01:02:05 Right. So there's other parts to your app. Yeah. Right. That, I mean, your entire app is an ETL, right?
Starting point is 01:02:13 So something has to be specific. And so that ETL part that's coffee is the specific part. And it has to be there, right? Like you can't really, I guess, I guess the thing is when, when you start talking about things like that, right? Like just as't really, I guess, I guess the thing is when you start talking about things
Starting point is 01:02:25 like that, right? Like just as an example, you might get streaming data come in, right? Like let's say that you've got website traffic and, and you're, and you're doing click streaming or, or, you know, mouse movements and stuff is coming into Kafka so that you can evaluate that stuff. As that's coming in, you're probably taking that and doing something, generating other data with it. And that might go into another Kafka topic. And then you have a consumer that comes over here and then maybe pushes it in something like Elastic or pushes it into Mongo. So here's the question. When you're writing your applications,
Starting point is 01:03:02 do you just assume that the Kafka stuff works? And so you just mock data into Elasticsearch or Postgres or Mongo or whatever and say, hey, we're never in our development environment going to force you to run Kafka to get data into there and run through the entire pipeline to get to your end state, your end data storage places. Now you see what I'm saying? Now I think I'm like seeing some things, some conversation. This is the preview conversation that Jay-Z had that I didn't have that.
Starting point is 01:03:34 So I, okay. So I think, tell me if I'm wrong, where, where this is coming from is that in our specific environment, we use scaffold and we scaffold up the environment. And when we scaffold up the environment,
Starting point is 01:03:46 we're scaffolding up the entire infrastructure on your laptop. All of it. And we have a process that can generate fake data that looks real, but it can mimic whatever the customer source is, and it would flow the entire way through until it eventually gets into, uh, you know,
Starting point is 01:04:06 where you might look at it in a UI, right? So every touch point that it might've had to go through, which, you know, could be a half dozen easily of technology, not even the apps, just the technologies,
Starting point is 01:04:18 the technologies we've got. So, so now we're saying that like, Hey, should we be doing all that? Or should we just be mocking the data for that other instate? Right. Okay.
Starting point is 01:04:30 So the rub there is from a pure Uncle Bob or I can't even remember the author's name from the DDD book. Something Evans, right? Yes. Oh, man, you're so close um something evans so something evans and uncle bob there we go um uh sure it's boom nailed it eric eric evans of course then in that case you know they're going to say like no no you should agree on the contract of like this is what the final data is going to look like and say like an elastic right and i don't care how it got to elastic if it had to go through kafka fine but this is what the final state of that's going to look like you know i mean sure you could do that but then
Starting point is 01:05:17 from like where i'm sure this all came from from our local dev story then it's like okay well who generates the fake data in that elastic instance for the developers to use dev story, then it's like, okay, well, who generates the fake data in that Elastic instance for the developers to use? And that's where it's like, oh, well, we end up going from the beginning all the way through the system then because you're going to need it anyways. And you might as well test the system. Right. And let's take it a step further. Maybe you shouldn't even be putting it into Elastic.
Starting point is 01:05:42 Maybe you should have some sort of mock API out there because we've already said that you're going to create an API that things should be calling. So you should just have mocks behind that thing that when you're in the dev environment, you don't even stand up Elastic. You don't stand up Postgres. You don't stand up anything else.
Starting point is 01:05:59 And you just have your API return mock. See, okay. See, so that's where I'm going, right? Like there's... This is difficult for me though. So where I'm having difficulty with this part of the conversation is that like, okay, sure, but now I need, like where does that mock live, right?
Starting point is 01:06:19 Like the way you were even describing it, it kind of sounded like you were in some kind of a language, like a C sharp or something that I'm going to compile that has language. But now it's like, okay, what about, you know, I have a bunch of like, say a Postgres routine that I want to, I want to test. Where's it getting? Oh, so I should put mocked it there. Okay. Let me back the mock-up all the way into Postgres. And eventually that's, what's going to happen is you're going to keep backing that mock-up, which is exactly what happened to us, by the way. Because if you know the story,
Starting point is 01:06:50 that fake data didn't originally start where it is. It did start more at like, this is exactly where I need it and I'm just going to create data to look like this. But where I was going with that though is that the problem that I have with that is that if I want the problem that I have with that is that, that if I want to not be responsible for generating realistic, you know, data, but I do want to write
Starting point is 01:07:14 code that runs on large sets of it. And I need the ability to just like flip a switch and like, Hey, I need a billion, uh, you know, data points, you know, fake, you know, data points that look real, right. Or, Oh no, uh, today's not that kind of day. I just need a hundred, right. That's, that's where the rub is for me. It's like, you know, where do you, where are you going to put that intelligence? And right now where we have that intelligence in our system is all around that far end, but you have to run it through the system where it comes in. Right. Like it has to flow through every point.
Starting point is 01:07:49 Like it wouldn't a real production thing. And here's the thing, right? Like this is actually a very hard thing to completely solve. Like I wanted to bring it up here because as a developer, like you have to have a pretty beefy machine to bring up, you know, As a developer, you have to have a pretty beefy machine to bring up seven or eight different technology stacks that are all working together, right? Multiple stream processors, things that are pushing things into and out of Kafka and into and out of databases and all that kind of stuff.
Starting point is 01:08:19 It's not easy. So if you're really just trying to work on a UI, right, you just need the very end state. It kind of sucks that you got to spend up the entire freaking infrastructure just to get something to show up in the UI. But where do you cut that off? Like, at what point do you say, you know what? It's good enough to just mock it here at the API and not worry about anything else. I mean this, okay. So this is actually like a,
Starting point is 01:08:52 this isn't necessarily where you're going with this maybe, but I mean, I have raised a similar kind of issue about this, about like how interwoven dependencies are and the fact that like in that particular situation, we, in order to have some fake data, you know, it had to come from a go all the way to Z or whatever,
Starting point is 01:09:12 you know, which to me, like I'm so used to it. Like I don't mind it. Like I, it's, I really honestly don't, I kind of like it honestly.
Starting point is 01:09:19 Um, but, uh, you know, it does bring up the question of like, Hey, there should be, if we do go back to the Bob Evans approach here.
Starting point is 01:09:29 Oh wait, we said Eric and sorry, I'm sure he's only heard that like a billion times. So now I feel really bad. Um, um, but, but,
Starting point is 01:09:39 but, you know, we would have like a bounded context around these things. And like, we would have like, I don't care what you're doing over in your land. This is what my, um,
Starting point is 01:09:50 you know, I created the mocks for my purpose and I'm going to go with that. And then we would use the other system for like scale testing. Maybe, you know, we like, cause it still has value. I wouldn't get rid of it to,
Starting point is 01:09:59 you know, for any, so really what we're saying is where you should put your abstraction. If I, if I'm deciphering what we're saying is where you should put your abstraction. If I'm deciphering what we're saying here, your abstractions should be able to be injected at your API layer. Meaning if... I didn't specify like an implementation, like injection.
Starting point is 01:10:19 Well, I say injection only. I don't even mean IoT type stuff or not IoT, I say injection only me. I don't even mean IOT type stuff or not IOT, IOC type stuff. I'm talking about more like you can swap out what backs that API by some sort of decision, right? So get user information. Is it talking to Elasticsearch and Postgres and SQL Server or whatever? Doesn't matter. You can tell it to just use some files that you have on the system if you want, but that needs to be something that you can swap in at runtime more or less, right? Like, um, whatever backside API, all the other things we're saying, you don't try and abstract them. Like, like what, what you were saying, Joe, about Kafka. And that
Starting point is 01:11:02 was kind of what I was getting at is Kafka is sort of like the backbone of what you're doing a lot of times. So you can't swap it out, right? Like it's not just something you can say, oh, well, produce to something fake and consume from something fake. It doesn't work that way. It's not easy to do that, especially because it has its own protocols. It's awkward so you keep that and you run that you test that thing independently but when you need something to work for your application it should be talking through an or multiple apis that can all be backed by things
Starting point is 01:11:40 that are swapped in at runtime whether it's mocks whether it's things at the file system level whether it's coming from some data storage somewhere else. That's what we're saying is if you make that API layer decent enough, then you can decouple the other bits of your application to where you can develop them independently.
Starting point is 01:11:58 That's why I wanted to work in isolation in the individual piece. Just like a database. I love that I have a database and it's designed to have, you know, a billion concurrent connections to it that get data. But I also love that I can hook up a graphical client to it and use it as a human and do some things with it. And that's really nice because it doesn't have to have those other things like the database
Starting point is 01:12:17 can run standalone. So I want that from all my apps, but it's hard and I'll take what I get. I mean, to take it one step further too, and this hits on something that Outlaw mentioned is if you need a billion data points, right? Like this is something we struggled with at various times too, because it's like to get those billion data points, you have to generate that and it can take days, right? Like it can actually take a long time to generate it. What really stinks about it though is if you're working directly in something like a database, right? Let's say that you're in SQL server or whatever,
Starting point is 01:12:48 you generate a billion data points. Well, guess what? You had to change the schema tomorrow because you're adding new things or you're breaking some things out into another table. Your billion data points are basically shot now and you've got to regenerate them because it's a new structure. So even the whole notion of having a backup of a database that people can just restore and use, it goes out of fashion so fast because of changes to the application that it's useless. So it's almost worth it to just take the hit up front, design a good API. Again, like what you said that Spoonraker said, where it's like design it around the feature set that you need, and then that way you can fake the scale that you need, right?
Starting point is 01:13:35 You can totally fake it without having to fill up a database or without having to fill up some sort of document storage engine or something. Unless what you're working on is actually something that needs to work at scale. And then that's different. That's the rub. Because I was immediately thinking of some large data set type operations that I've worked on where it's like, I can't. How would I fake that?
Starting point is 01:14:01 Right. Right. Yeah. I mean, if you're doing ML type stuff, I know in the past you were doing some stuff with ML, whereas like I need a ton of data, right. And I need it in the right format and you can't get around that kind of stuff. But when you're talking about your applications that are instead of every single bit of your application, reaching into the different storage technologies, make them go through an API. And then that way, you can put a layer in between things
Starting point is 01:14:27 so that the only thing that is tightly coupled to those storage engines are the implementations that get plugged into those APIs. And that's easier said than done, too. I mean, like, okay, so in that regard, you're saying, like, you could basically have, like, a repository pattern kind of thing around every one of these technologies,
Starting point is 01:14:44 like a Kafka or a Mongo or a postgres or whatever right like right i forget what else you named thought you named a sql server whatever you know pick your i say elastic uh yeah elastic just pick whatever some kind of dow some kind of data access layer they could like live in front of it and then if that's the only touch point right right? The nose of that thing, then you're just saying like, okay, now maybe I fake that touch point. Right.
Starting point is 01:15:09 And, and instead of having like, you know, a SQL server Dow, I also have a mock Dow and I can use my mock Dow, but that could get weird too. Yeah, it can get weird.
Starting point is 01:15:23 Um, but I think ultimately what we're talking about though is, is if your API has a contract and a contract you call get user, if that contract says the user gets you back a first name, last name, phone number, email, doesn't matter where that stuff comes from. As long as whatever is providing that data gets it to you, even if it was across four different storage engines. Right. to you, even if it was across four different storage engines, right? Like for those that don't know, like Amazon for their ordering system, they don't store user PII information in the same place as order information, right? Like you have to go to multiple systems to get it because they don't want it to where you can pick up a hard drive and walk out and have everybody's data. So very likely, even for something that seems very benign as
Starting point is 01:16:05 getting an address on an order that's coming from multiple systems. And so as long as whatever's fulfilling that contract returns you back that data you need, who cares where it comes from? And then you can mock it pretty easily. I think by the way, like I actually remember that as it wasn't even necessarily, they didn't want you to be able to pick up the hard drive. It was that they didn't want you to be able to see the order of to and from. They didn't want you to be able to see that Bill bought flowers for Monica. It was even further than that, right? Like if you packed a box with flowers, they didn't want you to know that the flowers were for Monica, right? You didn't even know what was in that box until somebody touched it way down the line where it was just a label going on it so i mean it's super interesting and they really do a lot
Starting point is 01:16:50 to protect their customers but but it is it is interesting to know that just what seems to be just regular data that you would always use is in multiple different systems the thing is though that i'm convinced i i'm 1,000% convinced in this. And if you want to fight me on it, I can meet you out in the parking lot after school at 315. But we read all these books, and they have all these grandiose ideas. And this is what you should do. These are best patterns. And they aren't wrong.
Starting point is 01:17:22 But also, sometimes they aren't practical. Well, right. But also sometimes they aren't practical. Oh, totally. And so we, as the type of people who get into this industry, we are lazy by nature. That's why we're here. We're like, oh, I don't want a job where I have to go and work. I could lift things. I could just punch things on a keyboard like we like to solve problems but we don't want to like do things and we also like even type in sometimes it's like too much we're like no i want an easier way this code pilot thing sounds amazing i'll use that to like write
Starting point is 01:18:00 all my stuff so so as much as we read about like these great things and patterns that you're like, right on my stuff. So, so as much as we read about like these great things and patterns that, you know, uh, Evans and Bob will tell us, uh, we're on first name basis. Um, uncle Bob, that is, I wasn't, I wasn't trying to rehash a bad joke. Um, then, then, you know, we implement those where we can, when it's not inconvenient to do so. Right. But if it becomes more of a burden to implement some of those things, then it's like, I don't disagree that we should, but at the same time, I got a job to get done, man. We got to go. Let's do this. On the flip side though, there are times we're just trying to do it the regular way
Starting point is 01:18:45 you end up fighting that a lot too because when there's so many different touch points and it's like how many times should i spend a day trying to figure out why this didn't work because somebody checked in a configuration that broke it right like it's that's why you know i'm writing tomorrow's legacy today right so good this episode is sponsored by educative.io educative.io offers hands-on courses with live developer environments all within a browser-based environment with zero setup required and that's what matters make it easy so that you can get started fast and learn fast and with educative.io you can learn faster using their text-based courses instead of videos focus on the parts you're interested in and skim through the parts you're not and uh speaking of uh educative of course uh if you want to have some fun go look at the courses you can go to the
Starting point is 01:19:36 course home and go take a look at these things and it's like a kid in a candy store i'm telling you so i was just looking at their devops path here uh it's 50 hours worth in a candy store. I'm telling you. So I was just looking at their DevOps path here. It's 50 hours worth of stuff. And there's a lot of stuff in there I would probably skip, honestly, because it's things like, you know, maybe Azure or Docker Compose or things I don't care about. And I could do that because it's text. And I can do, I can jump right into the things that I care about. And it's easy and it's indexed and it's wonderful. I can get right to the heart of what I need. And speaking of what I need, I just noticed that the Grokking, the advanced system design course that we mentioned before has a whole section on Cassandra that talks about
Starting point is 01:20:14 wide column databases and the way that the data is laid out on disk and the way the replication works, which would have been great last episode when I got confused about how the data worked. And so now I'm reading through this and I didn't see how long this was going to take, but it's quite lengthy already. So I'm enjoying myself here. Going to get a nice cup of coffee in the morning tomorrow and finish this thing up. It's really great, too, because like kind of to your point, Jay-Z, is you could just ask yourself, like, what kind of developer do I want to be when i grow up hey i want to become a front-end developer
Starting point is 01:20:47 well guess what they've got a whole course on that i want to specifically maybe i want to be react there there's a whole section on courses or modules on that wherever you want to go after you can and better yet like when you do decide what you want to be when you grow up, you're going to have to interview for that job. Well, guess what? There's a whole section, like a whole listing of different courses related to like how to handle different interviews. Right. learning interview, which focuses on the design side of ML by helping you design real machine learning systems, you know, such as an ad prediction system. It's the only course like this on the internet, but they also have, you know, DevOps for developers and decoding the
Starting point is 01:21:37 coding interview or coding career handbook. So whatever you want to learn, there's a course or a set of courses out there for you. Be sure to check out the best-selling Grokking the Interview prep series with courses like Grokking the System Design Interview, the one I just mentioned, Grokking the Advanced System Design Interview, and Grokking the Coding Interview. Yeah, so go ahead and do this yourself by visiting educative.io slash coding blocks, and you'll get an additional 10% off an educative unlimited annual subscription. You'll have unlimited access to their entire course catalog, but hurry because they don't run these deals that often. That's educative.io slash coding box to start your subscription today. All right. So it's that time of the show where we ask you if you haven't already found it deep in your hearts to go out
Starting point is 01:22:33 and leave us a review, please do. We, we love to get them. We love it when, you know, if you have something funny to say, like how, how properly we say niche or niche, um, you know, share it, um, go, go out in, you know, if you've got a few minutes and you remember, uh, after your commute head to codingblocks.net slash review, we have a couple of links there. I think one for audible one for, uh, iTunes. And if you wouldn't mind, leave us a review and, and let us know how we're doing, if we're helping you out or anything, we truly do love that. And if there's a particular niche that you want us to talk about, then yeah, we'll talk about it. Share that too.
Starting point is 01:23:12 I think I said it right that time. I think so. All right. Well, with that, we head into my favorite portion of the show. Survey says. All right. So a few episodes back, we asked, how often do you leak code? And your choices were never. I'd rather fill in the blank or when I'm prepping for a big interview or all the time. Got to keep the saw sharp or well,
Starting point is 01:23:46 sometimes I start, but then I remember I don't want to. All right. So this is an odd number episode in according to Tucko's trademarked pattern. Alan, you are first. This is the free open source pattern by Tucko.
Starting point is 01:24:02 So no copilot issues here. I, man, I'm torn. Like I'm going to pick on mine. Not what I think everybody else is because I think that most people are going to fall into one of these two. I'm not sure if it's never, I'd rather, or, well, sometimes I start, but then I remember I don't want to. Let's go with that one. Sometimes I start, but then I remember I don't want to let's go with that one sometimes I start but then I remember I don't want it and we'll go with 30%
Starting point is 01:24:28 week all right I'm going to go when I'm prepping for a big interview 30% week okay all right Alan says well sometimes I start but then I A week. Okay. All right.
Starting point is 01:24:45 Alan says, well, sometimes I start, but then I remember I don't want to for 30%. And Joe says, when I'm prepping for a big interview, also 30%. So if we see a lot of activity on leak code from Joe, we should be aware. Something's up. Now you know. That's what I just learned. Okay. Well, you both lost.
Starting point is 01:25:09 No. It's never. Yeah, it was never. I'd rather blank. Wow. All right. Rock on. Yeah.
Starting point is 01:25:19 I do number four. How much? 38%. All right. Good. number four how much 38 okay good uh alan was second though and did win by a percentage because he didn't go over so so we'll give alan the kind of win nice all right um which will like just be half of a trophy we'll just like cut it vertically right down the middle and hope that it still stands we all get a trophy yeah um well i didn't say I was giving Joe one. Okay. Oh, oh. Yeah.
Starting point is 01:25:45 What? No, you definitely lost. What? Because, so, well, sometimes I start, but then I remember I don't want to, was 31%. So, Alan didn't go over. Nice. Joe did go over. Okay.
Starting point is 01:25:59 That's why you get no trophy, sir. Not by much, though, right? Pretty close. No, 3%. Okay. Yeah, you went over by 3%. Yeah. What about you, Outlaw?
Starting point is 01:26:07 Do you leak code? I mean, honestly, I don't know that. I guess, I mean, sometimes, but it's like because I'm bored or it's like Christmas or something and I have time. And I didn't think to put that type of a choice on there. So I guess the closest thing that I would have on there would be like either the never I'd rather, or well, sometimes I start, but then I remember I don't want to, I would be torn between picking one of those two choices, given the options. But like normally, well, normally if you see me doing it, it's because it's like, you know, Christmas or, or Thanksgiving or something. And there's like a big block of time where it's like,
Starting point is 01:26:46 Hey, there's nothing else to do. And I get to like, you know, sit at my computer. I was going to say family avoidance is what that was. I wasn't. Wow.
Starting point is 01:26:54 Okay. Wow. That totally paints a different picture that I did not intend. And for any family that's listening, that was Alan that said that. That was not. I'd rather, I'd rather leak code.
Starting point is 01:27:04 That's why my option is never. I'd rather spend quality time with the family. I like that. That's a good answer. That's good. Alright, well then how about this one then? What did Master Yoda say when he saw himself
Starting point is 01:27:20 on a 4K TV? HDMI. Very good. Very good. I think that's the first time we ever had like a dead on answer to that. Nailed it. All right. Well,
Starting point is 01:27:37 that's, that takes the fun out of the jokes part. So, uh, all right. Smarty pants. How about this one? Then,
Starting point is 01:27:43 um, three SQL databases walk into a NoSQL bar. A little while later, they walk out because they couldn't find a table. You've done that one before, man. Have I? Yes. Dang it. Who's the no man?
Starting point is 01:27:56 Well, I mean, the first one Alan's shared with me, so he already knew it. I knew that one, yeah. But Phil sent me the other one on Slack, but I didn't remember we'd say that one. Yep. All right. Uh, well for today's episode now I'm kind of torn cause we talked about the
Starting point is 01:28:15 uphill downhill thing, but then like I started trying to write that one and I'm like, yeah, I don't think that's going to like, it's going to be too obvious. So, uh, you know,
Starting point is 01:28:23 I don't know that we should bother with that one. So I'm going to stick with what I originally had as the, the survey for this episode. Um, and that is drum roll, please. Uh, no, just, Oh, there it is. That was so awful. I was, I'm sorry. I apologize to the internet. I don't even remember how we came up across this, but it was which desktop OS do you prefer? And your choices are Windows. I like my OS named after things I don't look through anymore. Or Mac OS. I like my OS named after places I don't go. Or Linux.
Starting point is 01:28:59 I like to learn how to pronounce my distribution. When you said desktop OS, are you including laptops or is this just desktop? I was trying to exclude mobile because I didn't want someone to be like, where's iOS and where's Android? We were talking about I consider
Starting point is 01:29:17 even on a laptop, it's still your desktop. Yeah, it's your desktop. Your PC. I don't know what you call it now i don't know what you call it your computer but the one that's not in your pocket and also the one that doesn't have like the screen that folds over it my best friend but now i just messed that up too because that made it sound like i was talking about a laptop i don't know and you know what forget the survey yeah those commercials where they say that the the ipad is your new computer that's garbage too
Starting point is 01:29:45 yeah not having it okay that got dark um okay well there's alan with uh can't have nice things um i'm gonna i guess i'll try to go through this pretty quick but there was a an um in which episode was it which Which issue is this? Everything is an episode now. So this latest magazine that came in wasn't the latest, but this was an episode of the communications of the ACM magazine that came in back in, uh, May. And it had an article in here that I thought it would be pretty interesting to our world. The 10 best practices for remote software engineering. And the author wrote this, that wrote this, he, he based these 10 points, not on pan anything to do with the pandemic. Cause he was
Starting point is 01:30:34 already remote before that, but then ended up taking like, you know, all of his years worth of remote work. And then, you know, putting together like, Hey, this is, this is what could be good for a remote work. And some of it, I just thought was like, you know, some good, good things to just call out. Cause it's very much focused on you as the developer in your own happiness. Right. Cause there was a quote in here where he says, productivity is less a quality that can be measured, controlled, or improved directly with tools, but instead is a human element that manifests from developer happiness. And so if you consider that quote, like a lot of the things that the author then goes on to describe are kind of in that whole vein of like your happiness is what's going to matter, right? So number one thing, the best practices for remote software engineering was work on things you care about, because if you don't care about them, you're not going to put in
Starting point is 01:31:30 a lot of effort, but have you ever noticed that? Like, have you ever, okay. We've all been there where you've been assigned some kind of task, right. And it is, it might not be, it may or may not be customer facing, but you get so involved. Like that thing is your world. You love it. Like that's the thing. And you put a lot of effort into it. And you know, everybody like for years, like, wow, that thing was like so useful and helpful. And like, we still use it today.
Starting point is 01:32:00 Right? Like, you know what I'm saying? It is because it was something you cared about right because like think about like how much how much in our day let's be honest uh let's hope none of our co-workers are listening let's be honest how much like how many things do we do on a day-to-day basis there's like i don't care but it has to be done right right? Zero. Okay, well, excluding... You don't care about it at all? Excluding Joe.
Starting point is 01:32:27 You just don't do anything. Oh, no. Yeah, that one. Yeah, that's a good question. I mean, there's definitely a handful of things that you do every day that are just like, eh. I would venture to say that, you know, sometimes it's a lot and sometimes it's less, right?
Starting point is 01:32:42 Like, it ebbs and flows, right? And so the point that the author here was making, though? Like it ebbs and flows. Right. And, and so the point that the author here was making though, is that like the things that you care about, you're going to, you're going to put more effort into, um, and,
Starting point is 01:32:54 and, and you'll, you'll even go out of your way to like put it in. You won't even notice the effort, you know? So, yeah. That's why you get me working on something
Starting point is 01:33:05 is to tell me it's not working like oh crap like something weird happened and suddenly i care a lot more yeah how about this one though do you define goals for yourself that's number two i used to i've kind of gotten out of the habit i don't know i still kind of do like i used to do this thing where, um, I had like a little no bad. It was like, okay,
Starting point is 01:33:27 here's what I want to have accomplished today. If I get to these, you know, three or four things, whatever, I'll be happy. And if I didn't make one or two, I would just put it to the next day.
Starting point is 01:33:34 Whatever. So I kind of had this rolling thing and I like doing that, but I just got out of the habit. But I guess I do still kind of have like an idea every day where like, I know, but you know, it's still the daily level i don't know about bigger overarching goals okay i don't personally do it but i my stories or my
Starting point is 01:33:54 tickets or whatever that i've got are sort of what my goals are to try and knock out and it's just depressing because i feel like i'm going to nail it today. And then a week later, I'm saying, yeah, I thought I was going to nail that last week. I guess they do have yearly annual goals or something. This six months, I'm going to focus on Kotlin or whatever. The point that the author is making in this particular bullet, though, is that like, as a developer, excuse me, there's not necessarily like a very long ladder that you can just keep climbing, right? Like at some point you're going to like your, your developer side is going to like,
Starting point is 01:34:40 you know, that ladder is going to top out. And, and and you know, if you want to keep writing code, then that's that. Right. But if you want it to move up, then it's technically not part of the same ladder. Right. Does that sound fair? Cause you're going to like start getting more management type,
Starting point is 01:34:57 um, responsibilities and less about the code. Right. And so the, the, the author's point here was that, you know, it's, there's only but so much ladder. And so you're going to, it, you need to keep making goals for yourself because when you do get to that, to that upper ladder, but you want to stay there,
Starting point is 01:35:21 then it's like, well, what are your goals become? Right. It is like, let's say that, for example, uh, we mentioned Amazon before, right. And, and they have like SD, SD one, SD two, whatever. Right. And at some point, you know, like if you want to keep writing code, you know, there's only been so many levels of that SD level that you're going to get to before you're going to take, start taking on managerial responsibilities. And if you want to keep writing code, then your next developer goal can't be to get to, Oh, an SDE, you know, four or five or whatever. Right. Cause, cause you've capped out. Right. And so now it's like, you need to set other developer goals for you, which might be things like, I want to take Alan, for example,
Starting point is 01:36:06 I want to get a MVP from Microsoft. I want to, I'm going to go do some talks and I'm going to give it, get an MVP or, or maybe it's not a Microsoft one. Maybe it's a, you know, you want to get a Kafka certification or Kubernetes certified application developer or whatever, like those type of goals then become your motivation rather than it being necessarily career placement. Right. So, so that was his point there.
Starting point is 01:36:34 Or you actually, I said he, but I think actually this was written by a woman. So I'll have to say she, so that was her point. Okay. So number three, define productivity for yourself. And this is kind of what you guys were describing
Starting point is 01:36:50 when I asked you to define goals for yourself. Because you guys were defining like, okay, here's the number of tickets I want to get done. And that's how I'm going to define productivity, if I've been productive or not. Right? But she defines a productive day as one that you finish and feel satisfaction that your work was meaningful. Thus, it follows we might be able to define productivity for ourselves by assessing our daily tasks and deciding if they contribute to that feeling of satisfaction.
Starting point is 01:37:24 Okay. Yeah, I mean, that's definitely, those are the good days. and deciding if they contribute to that feeling of satisfaction. Okay. Yeah, I mean, that's definitely, those are the good days. Well, that, but also what that means though, is that you could have like a whole bunch of checkpoints of things, like goes back to my question earlier, right? You could have like a whole bunch of things that are like, you're not interested in doing it, but you've got to do them. But there's no satisfaction there, right?
Starting point is 01:37:43 Yeah. So does that mean you're being productive? Yeah. I think as long as you feel like you're making progress, right? Like that, that's, that's perfectly fine. It's, it's when you think that you were going to be done with something and you keep doing it, that it's like, it's hard to ever feel productive. Now, now, if you think about the first day that we've talked about so far, right?
Starting point is 01:38:03 It's really more about like, how do you manage yourself in your career when you're not around anybody else? There's nobody else there to talk to and to help you manage it. So you're trying to do all those things yourself. Number four is where we started to get into things that like make more sense in a traditional, like remote work, remote kind of situation, which is to establish routine and environment,
Starting point is 01:38:25 which that one seems pretty straightforward, you know, because the point here was that, that she was making is that if you, if you establish an environment where like, this is my quiet place and this is where I'm going to go code, then it, it will eventually become habit that that's just where you're going to go. And then it won't be a thing that, that like, it won't take effort to be productive in that space. Right. But if it's a space full of distractions and whatnot, then it's going to be harder for you to be productive in that space. And so, uh, you need to make changes to your environment and, or your routines, because part of that might be just like, hey, every morning or afternoon at this particular time, I'm going to go take a walk to clear my
Starting point is 01:39:11 head. Or I'm going to go work from a coffee shop in the morning and in the afternoons, I'm going to go home. And then whatever that routine is, that helps you establish your productivity. Um, what about this one though? Number five, take responsibility for your work, right? What does she mean by that? I mean, I would assume that we all do that.
Starting point is 01:39:38 Oh, you don't think so? I don't think we all do that. That's some of the stuff that's made me like kind of Mattis, like a, you know, like kind of the most some of the stuff that's made me like kind of maddest, like a, you know, like kind of the most irritating to me as someone who doesn't take kind of ownership of the work.
Starting point is 01:39:50 So it's kind of something like, well, you told me, you told me to do it. And so I did this way and you know, whatever I put it, it's like, Oh,
Starting point is 01:39:56 well you didn't test it. You didn't. And now you find out it's broken. You didn't, you know, rush to go kind of fix it. You let other people like clean up after you. So that kind of stuff is when I, when I hear your work, to me it means like not only do you deliver it and you do your best to kind of deliver it in a way that's professional and that kind of meets expectations that you've set and everyone is agreed on.
Starting point is 01:40:18 And then you also support it. So if something breaks, then you kind of go and take care of it. You don't just like leave it for someone to kind of like bang on your door in order to get you to fix it. Okay. I like that. Where this becomes important, because again, this is all under the like remote software engineering, is that by taking responsibility for your work, you can start to establish trust among your peers and, you know, managers. Right. establish trust among your peers and you know managers right and they'll trust that like hey i don't have to have uh 18 different metrics to trust to track what alan is doing i just know
Starting point is 01:40:55 that if i give him this task he's gonna go get it done now joe i joe i need to like go look at his hours and see where he's been in his time. Right. Like that's the kind of difference that the author was trying to make here. So by taking responsibility for your work, uh, you know, you're not just like committing it, committing something and then going off and not caring about it. Okay.
Starting point is 01:41:18 Take responsibility for human connection. Now this one, not important, not important. Is that what you said? I'm totally kidding Now this one, not important, not important. Is that what you said? I'm totally kidding. This one, this one was all about like,
Starting point is 01:41:30 um, either like being part of a community. So like seeking human connection means in attending virtual workshops, conferences, conference calls, or looking around for regular meetings that you could participate in. It doesn't have to be, you know, necessarily in person, but it was just basically about like, don't, don't just let everything be text on a screen. Right. Right. You need some kind of
Starting point is 01:41:56 interaction. Like this is a prime example for us, right? The three of us work remotely. I haven't seen you two in person. It's been years, unfortunately. God, it's crazy. But we regularly keep in touch like this. And there are some times where we'll talk for hours. And Jay-Z will happily leave us be. And then we'll be like, oh, we're still talking. So yeah. So, so take response.
Starting point is 01:42:26 So you need the human connection if you're going to be successful from working from home. So that's part of the 10 best practices. Number seven was practice empathetic review. So, uh, it was basically like how this one was, this point was more about like communication and communication can be hard and you can read things and you know, you just need to take some, take a moment to have some empathy when you're reading something because what might have been written, your natural instinct is you're going to try to read it in your voice and you're going to put it in your, um, cadence or whatever, you know, at that particular time, right? And that might not be the way that the author meant it. If they wrote you back something
Starting point is 01:43:13 that was short and sweet, that might just be part of their culture or part of their region. That's just how they communicate there. Things are just blunt. Right. Um, you know, like take, for example, there's the, there's the historical or not historical, uh, stereotypical thing about like New Yorkers or, or, you know, rude. Like you always used to hear that, right. That like New Yorkers are rude. And in my, my spin on that was like, I never considered them rude. It's just that they didn't beat around the bush. They were just like, you know, if you ask the time, they're like, it's one o'clock and they moved on. Right. And that's the kind of cultural or regional kind of difference that speech could mean. Right. So that's what, what that one meant.
Starting point is 01:43:56 Well, I'll tell you right now, if you, if either of you ever respond to me without an emoji, I just assume you're mad at me. So I need that at the end, at the beginning, somewhere in the middle. You don't get a lot of emojis from me either, do you? No.
Starting point is 01:44:13 No, I notice that. You notice you get a lot from me though. You want to know why, Joe? I'm trying to teach you. Okay. This one I think is like really, really hard. Have self-compassion. Basically the idea here was that we are each our own worst critic, right? And she says, self-compassion can broadly be defined as being mindful and forgiving to yourself.
Starting point is 01:44:46 Right? Something didn't go well, you didn't get something done. Like, don't beat yourself up about it. And I know that I am particularly bad about this one. Like, you know, I am definitely my own worst critic when it comes to things. And, you know, I need to get better at it apparently um okay number nine learn to say yes no and not anymore so the idea here was that um i don't know like how many times you guys think that this one would be a problem for you guys but um you know sometimes you need to say no if you don't have the bandwidth to take on a new project or you don't share that project's vision, but, um, or if like maybe just in your gut, it's saying like, you know, I shouldn't take on this project, but then there's sometimes there, you do want to take on a project, but then there's also times where like you take on a project and then you're like, you know what? I, I, I can't be involved with this anymore. Right now. The reason
Starting point is 01:45:44 why I was saying like, I don't know how much was, you Now, the reason why I was saying, I don't know how much I was curious what you guys might think about this one is because at least in the way she defined this particular point, it was more about if you were to take on, at least the way I interpreted it, it seemed like it was more about outside projects
Starting point is 01:46:02 that you might take on, not necessarily things already going on at work. But as I say that I could, you know, that was at least from the, the way it was written, but I could definitely see how it could apply to things at work too, where it's like, Oh, I probably shouldn't have taken on that additional responsibility or that additional feature. Cause I don't have the time for it in my current sprint or whatever, right? Yeah, I'm sure we've all been in a spot where you're like, we're going to take it,
Starting point is 01:46:28 we're going to take it, and you're like, oh, I've been, this is taking so much longer than I thought it would. I can see how much further I have to go, and I really don't think that it's worth it. If we had known how long this was going to take, I think we would have elected not to do this. But now I'm kind of invested in it,
Starting point is 01:46:42 and so I don't want to give up. I don't want to stop and lose all this, this time that kind of invested in it and so i don't want to give up uh i don't want to stop and lose all this in this time that i've sunk into it i also know i have a bad problem with uh something i do all the time where like i kind of feel like once i set the precedent on something you can never take it back so my wife is always reminding me that uh you know as i've like learned new things it's like you let the neighborhood your neighbor borrow your hose once and they uh you know if they don't return it or it's paying the butt next time they come to borrow the hose,
Starting point is 01:47:07 you can say no. Even if you've done it before, it's not some, you're not breaking some social contract. Like the world changes, you have to change with it. But I don't know, for whatever reason,
Starting point is 01:47:17 I like, I always think I have to be consistent in how I behave with other people, which I am not consistent in anything else I do. But that, for some reason, I don't know. So number 10, and I've been going through these really quick. I haven't given you guys a lot of chance to interject too many thoughts, but it's because they don't matter. No, I'm just kidding.
Starting point is 01:47:41 I'm just kidding. Totally. Winky face. So number 10, choose correct communication channels. And we've kind of talked about this in the past as it relates to like letting the communication, like what your sense of urgency in terms of the reply is dictate the type of communication that you use. But what she pointed out here, which I thought was great, that we hadn't considered yet too, is that sometimes the communication might, maybe it should happen in the open.
Starting point is 01:48:15 And so, you know, regardless of sense of urgency, take that out of the equation and just like, do others also need to be aware of this conversation? Does this, does this need to be documented in any kind of way? And so, um, you know,
Starting point is 01:48:31 consider that. But there, and there was also this point that, um, where she says like, if, if discussion that should be open and linked to code would be better on, uh,
Starting point is 01:48:42 as a GitHub issue, for example, uh, rather than like say Slack, for example. Right. And I know that like I've seen way too many conversations that are definitely technical in the weeds conversations that are about code that happen in like an instant messaging kind of platform that are lost and you can't ever find them again right versus if there was a uh you know something documented then other people you could
Starting point is 01:49:12 just point to me like that's where we previously talked about that thing and i don't want to ever have that conversation again right yep um this happens to where you start a conversation on one and then it's kind of awkward to bring it to another. I don't know if you ever have that. Well, but she does make the point here in this. I think it was this bullet point where she was saying that, yeah, it was this one. That the conversation might start in a collaborative document type tool like a Google Doc, and then eventually as it starts to solidify, then you might take that conversation into some form of version control. Yeah. The only part here that's tough for me is I think one of the big reasons why a lot of the
Starting point is 01:50:01 times you'll see these things start happening in a chat is because if it's in a disconnected environment like GitHub, for instance, right? Somebody replies to something. Now you've got to wait for somebody to get the email and then see that they have a comment and they've got to go back and reply. It doesn't flow. And so you're out of that headspace at that point. And so having the immediate conversation in a channel where people are more focused is a whole lot easier. Now I do like the idea of taking what came out of that context and putting it somewhere that's, that's more solid. Um, but, but that's,
Starting point is 01:50:39 that's the part of working remote that is tough, right? Because if you were in an office, you probably wouldn't have that context at all because somebody would just freaking walk over to a cube and be like, hey, let's talk about this, right? So, and then that doesn't get transferred into GitHub either or into some sort of source document. So I think you have similar problems. I guess what you're saying though,
Starting point is 01:50:58 that makes a lot of sense is taking the output of what that conversation was and getting it somewhere so that people can reference it at some point. That makes a lot of sense to me. I mean, her point wasn't necessary to capture the output. I don't want to... Oh, no, no. That's what she was saying. Yeah, I mean, I don't mean the entire conversation,
Starting point is 01:51:21 but what you were saying is if there was some sort of decision that was made that drove a code decision. Right. That would be somewhere that you could reference it. And so, no, I'm not saying that you have summarized the conversation or anything like that. But I am saying, though, that the different channels dictate why you would choose one channel over the other. Right. Just just the flow of conversation is way different in an email or in a GitHub repo or in a Slack chat. Yeah, part of the summary here, she says that the software engineer who feels in control of their work and has mental tricks for handling uncertainty and stress is more prepared to deal with said uncertainty and over time is more productive and happy. Which is like, okay, that makes sense.
Starting point is 01:52:07 I can see that. Yeah, I want those things. So, I don't know. We've worked remotely for years and years. Thinking through some of these things, I was like, yeah, I don't know that I have done any of these things. No, you totally have. Absolutely. All of these things.
Starting point is 01:52:36 Yeah, you've done many of these things. I'll say the one thing that I think the three of us – Not that one though. that I think the three of us, the three of us have done really good on is the, the human, the human connection thing, because I think at least us three and probably several, several of our colleagues, we were like, yo, when we have meetings, you turn the camera on unless there's something else going on that, that, you know, I mean, if, if there's people destroying your office because you're having it redone or whatever, fine whatever but uh even if your baby is in the background flinging poo over their head i don't care turn the camera on true story keep it rolling um but but i mean it's so important to know that
Starting point is 01:53:18 there's a person there right and and we've actually seen it leak into other teams that we work with right like a lot of times i don't know if it's peer pressure or what, but they'll start turning on the cameras and it just creates a more. It's like going to sit down at dinner. Right. Like if you sit down with a bunch of friends, does everybody want to be staring at their phone? That's not that's not interaction. Right. Like you want to be talking. You want to be interacting. And and there's a big difference when those cameras are on. So we've definitely taken some of these things and done them over time some better than others but you know so i had um i had two and uh this other one huh i missed it all i went too, it's okay. I think all three of us went pretty
Starting point is 01:54:06 decent. It's okay. This other one though, I think I'm going to like save as some of my tips of the week. So I'm going to go last and we're going to head into Alan's favorite portion of the show. It's the tip of the week. Yeah, come
Starting point is 01:54:22 on. All right. It looks like I'm going first. So I've got another IDE type thing for you. I just discovered this today. I searched for it on the Lark. I wanted to see what kind of diff I could do in VS Code, see if there's a cool extension for it. And there is. There's a popular one named PartialDiff,
Starting point is 01:54:37 and it does three things that make it really nice. One is the list of diff of file versus file, right? There's nothing really new there. That's like everyone can do. You the list you diff a file versus a file right there's nothing really new there that's like everyone you do you can right click a file you can right click another file and say you know kind of compare is left or compare is right whatever you can say you know compare to previous whatever and that works and that's normal the two things that make different is uh number one you can diff parts of the file so you can select something and say, you know, right click mark as compare, scroll down a little bit, compare the top half of
Starting point is 01:55:12 the file to the bottom half of the same file. Yeah. Or if you've ever done something where you're like, oh crap, there's something, you know, they're over here in GitHub. I can see some stuff that I need. And over here in my editor, I can see some other stuff that's similar. I want to compare the two. Well, then you could paste that into the same file and compare, you know, select, do your selection, right click, do your selection, right click.
Starting point is 01:55:32 Now you're comparing. Oh, so that was nice. Well, then number three realized I didn't even need to do that because it lets you do a comparison with what's in your clipboard. Yeah. So you can go to GitHub, copy out the selection, go back to your editor, copy the thing you want to diff against, right-click,
Starting point is 01:55:50 say compare contents, and it pops it open in a new window, and you're comparing. Oh, that's pretty sick. So I want to copy my answer from Stack Overflow. Did I make enough change that I don't have to give attribution and it'll tell me in the red? Right. There you go.
Starting point is 01:56:03 Oh, dude, did you even see the keyboard shortcuts for this thing? Yeah, I did. I didn't try them, though. I just did a right click. Control plus, control three will compare whatever you had marked as a selection with what's in the clipboard. Control two compares to the other one. That's pretty slick. So what Jay-Z didn't mention is this is only for Visual Studio Code Ultimate.
Starting point is 01:56:33 That's how you get them in there. You get them in the door. Well played, Alan. Alan with the joke. That's right. Yeah. Yeah. It's early tonight.
Starting point is 01:56:42 How much would you pay for a VS Code Ultimate if they had one? I probably would. I don't even know. We don't even have features for a VS code ultimate if they had one? I probably would. I don't even know. We're like, we don't even have features for a hypothetical, but we're still like, yeah, I'd do it.
Starting point is 01:56:50 Yeah. I'd pay for visual studio code ultimate. And we shouldn't say that. Cause Microsoft's going to be like, but there's a market for this. Yep. Do you want to joke? Yeah.
Starting point is 01:57:03 Yeah. What did the pirate say on his 80th birthday? Arr, matey. Yes. My jokes are awful tonight. I got that one. All right, well, I'm going to go home. Oh, wait. Oh, wait.
Starting point is 01:57:27 I don't like this remote work stuff. Right? I've been home for years. Alright. How about, Alan, you go? Oh, you want me to go? Yeah. I saw that you have a site on your tips that I hate with a dying passion. So that's interesting.
Starting point is 01:57:44 Yes. We'll talk about that in a moment. All right. So I've got a few, I've got a few based off just various things that have happened throughout the week. Um, one is I had to do some angular, not angular jazz, some angular stuff this week. And I really didn't want to have to try and get it all set up right like i didn't want to deal with that well on angular site they have a link to something called stack blitz stack blitz.com is actually really cool so if you go there you can basically say hey i want to spin up a development environment for pick one, Angular, React, React, TS, Vue, Svelte, tons of things. You click it. It actually sets up a developer environment and
Starting point is 01:58:35 it automatically scaffolds out a project. So I just clicked on the Angular one. It puts together an Angular application and it works right there in the browser right so you have your ide which is visual studio code more or less in the browser and then your output on the right of your application and i was able to actually go through and and import some angular um components and do what i needed to do right there in the browser. And that was amazing because I didn't have to go through the whole rigmarole of getting it all set up locally. Fantastic. So highly recommend it. I was able to do stuff really fast and was super happy with it. Um, so we were talking about abstractions earlier and it, the Kafka abstraction was
Starting point is 01:59:23 driving me crazy, right? Like I was kind of curious, like, is there anything out there? Well, when I searched for that, I came across the site called microcs. So M-I-C-R-O-C-K-S dot IO. And this is pretty interesting. It's an open source Kubernetes native tool for API mocking and testing. So essentially you can set up in Kubernetes, these things that will give you APIs that you can hit and fake data through and test and all that. Now I haven't dived into this too terribly far yet,
Starting point is 01:59:59 but it looks like it's made for continuous testing in Kubernetes, especially for dealing with APIs. So this is something that I'll be looking at a little bit more here in the near future. They have things set up for, as a matter of fact, I saw it in the blog. So they've got a couple of guides here. They have more, but they have MQTT mocking and testing Kafka Avro Avro and schema registry testing. So they've got some pretty cool stuff there. Um,
Starting point is 02:00:29 again, haven't used it. And then that brought me into something else that I bounced and stumbled upon that is pretty interesting. So we mentioned that Kafka itself has its own protocol that it communicates on. Right? So typically if you're doing a producer or a consumer, you usually have a producer client library that you use,
Starting point is 02:00:48 which if I remember correctly, you guys can tell me if I'm wrong here. I believe that there's a standard C++ library that most other languages end up wrapping, right? So there's the C++ communication thing that implements the protocol. And then you'll have C Sharp, Java, Kotlin, whatever libraries that wrap that thing that are what allow it to talk back and forth to Kafka over that protocol. Well, there's a pretty interesting thing here that the Stremsy operator,
Starting point is 02:01:19 which we've spoken about in the past, the Stremsy operator is a Kafka operator for running on Kubernetes, um, with their own custom resource definitions and all that kind of stuff. But what's cool is they expose topics for reading and writing via HTTP endpoints, which is really nice, especially if you've got something like some IOT devices where you don't want to have to bring in like crazy libraries or anything. If they've already got some sort of HTTP client on it, then you can hit this thing. The Strimsy operator exposes this HTTP bridge for Kafka so that you can write to topics and read from topics. So that's pretty cool. I don't think it's a great way to abstract for an API or anything because you still have other things that you got to do behind the scenes, but it is a, it's
Starting point is 02:02:08 an easy way to get data into and out of Kafka, which is pretty cool. That's it. That sounds pretty neat. I have to read up about that one. Okay, so I'm curious to hear Alan's complaint about this, but there was, I So I'm curious to hear Alan's complaint about this. But I was basically trying to do some stuff. The name of the article is The Difference Between GREP, SED, and AUC, which, okay, fine. That wasn't what got me there. But I was looking for more information on SED awk specifically and what i loved about this article with was that they have like great examples for like how you could do things with both well actually and grep too but i
Starting point is 02:02:54 kind of skipped over that part but um and you know specifically like if you wanted to use because awk is like a full-on full-fledged programming language you know comparable to like a pearl but you can do it all on the command line and i had some you know things i wanted to do where like i wanted to tokenize some inputs from one thing and do some things with awk to like get out of their outputs from it and so this was great for me uh now the website URL, it's not maybe the best name. And honestly, I hadn't even noticed it until Alan said he doesn't like this site for some reason. I forget what you said exactly. Yeah, I hate this site.
Starting point is 02:03:39 It's Baldung. Baldung, I believe is how you pronounce it. Okay. That's better than what I was going to say then. I thought it was Baledung. Baledung. Baledung. Baldung. I believe is how you pronounce it. Okay. That's better than what I was going to say then. Baldung. Baldung. Baldung. Not sure. So I'll tell you real quick before you go into why this article is good, because I'm not saying that it's not. I know that when I was diving into Java spring stuff,
Starting point is 02:04:00 they pop up for everything you search for. And all of the articles are so incomplete that you leave with more questions than what you came with and it was hyper frustrating that they were at the top of every search list and I never got what I needed out of them it was infuriating so I got to the point where I just skipped this site if I ever saw it but that that may be unfortunate because if this was a good article, then that's totally different than what I was experiencing with the spring stuff. Yeah, I can say that at least for what I needed,
Starting point is 02:04:34 what I was looking for at the time, this worked perfectly for me. Again, I was focused on the set and the awk parts of it. I didn't know there was it for Linux. I thought it was the only spring. I thought it was just spring people. Yeah, because it shows up everywhere for you, too, when you're doing spring, right? Yep. Did you ever find it useful?
Starting point is 02:04:55 Yeah. It's definitely very starter-y kind of stuff, which I was looking for at the time, so it didn't really bother me. So I'll have a link to that. And then also, too, super good, Dave, on our Slack mentioned. So I think it was a couple episodes back now I had mentioned the hack for using the architectural ruler as the hack for using the architectural ruler as the,
Starting point is 02:05:25 uh, you know, the stand for your laptop, just like you, something you could just easily take with you, but, you know, get,
Starting point is 02:05:32 uh, you know, a little bit of, of a rise off of the desk so that your laptop could get some cooling underneath it, some venting underneath it. Remember that? So,
Starting point is 02:05:43 uh, Dave shared with me this other alternative that, and there's, if you look on Amazon, I'll have a link to it for Amazon, but in the, you know, recommendations and people also looked at or also bought, there's like a whole bunch of other similar kind of things like this, but I'm going to have the ones that, I'm going to link to the one that he specifically shared with me. It's this fold up stand that comes with a, a travel pouch. Uh, but it can, it can fold up and it can like hold your laptop at different or tablet, whatever, uh, at different heights,
Starting point is 02:06:20 you know, different adjustable heights. So it could get really low, like my ruler example, or if you needed it up a little bit higher, because maybe once you get to your office, for example, you know, maybe use your laptop as a second display. And so you want it raised up higher to be eye level with the other monitor that you might use in whatever your case might be. Point is, is that there's different height adjustable adjustments that you might use in whatever your case might be. Point is, is that there's, um, uh, different height, the adjustable, uh,
Starting point is 02:06:48 adjustments that you can make for this thing. And it's, uh, aluminum. So it would be lightweight and it folds up really nice. So basically like, um, you ever seen those kind of like,
Starting point is 02:06:57 uh, those tents, like those pop-up tents where the, the, the sides like scissor out, you know what I'm talking about? So, so this has that kind of scissoring
Starting point is 02:07:06 action so that it can collapse really small and then fit inside of a little travel bag that it includes. I thought it was a pretty cool option that I would share the link to. It's like $14 on Amazon.
Starting point is 02:07:22 Yeah. I got the rain stand, which is great, but it's not portable. Even when I wasn't using it for a little while, it takes up a whole box of my Ikea shelves. Yeah, I mean, if you travel, this thing is very desirable if you travel. And the iTunes review on this,
Starting point is 02:07:43 it has a 4.8 out of 5 on 3600 reviews so people have been happy with this with this little uh you know laptop stand so we'll have a link to that and then my other tip of the week and i should say tips of the week. So this was the other, uh, topic that I brought to the table for this episode, which was from, um, taken from, uh, one of the, Oh, it was the, the, the current May, June issue of code magazine, which, um, you know, if you don't already have a subscription, you could probably get a free subscription to it as if you have a, um, like maybe your company gave you a subscription to a visual studio subscription, for example, then, uh, you, I believe get a free subscription through that. Um, at any rate, you should, you should go check it out at, uh,
Starting point is 02:08:39 was there URL at codemag.com? Yeah. Codemag.com. And you can, you might be able to, you might already have something that, uh, lets you get a free subscription to it. And sometimes if you go to like meetups or conventions or whatever, uh, you know, then you can get, uh, vouchers for subscriptions to the magazine too. But at any rate, one of the articles in the latest episode, uh, latest issue was called terminal tricks. And we love these. And there were some in here that I highlighted that I was like, oh my gosh, I did not know that that was a thing. So right away, one of my first ones that the author put in here that I did not know, like, okay, we all love tab completion, right? So you, you, you're in like whatever your favorite shell is. And let's say you want to change directory. So let's say that, um, you were in, um, windows
Starting point is 02:09:34 is on my mind. So let's say you were to type in like CD space, backslash PR OG, and then tab, and it would finish out like program files for you. right? Well, sadly, not for Windows, but I did try this in both Ubuntu and Terminal. I used the Windows Terminal, by the way, and used an Ubuntu instance under WSL2 in Windows Terminal. And I used the macOS built-in terminal and verify that this works that let's say that you had a directory that was like slash far slash log slash journal right did you know that you could type in cd space slash and then just the first letter of each one of those so i did not slash v slash l slash j and then tab amazing and it would fill out the whole thing for you i didn't know that i did type the letter and then tab i guess the deal is if it's not unique then you have to type more but i didn't know that no
Starting point is 02:10:39 that's cool yeah that's really cool i do exactly what what alan says like after each one i would tab completion then type in this forward slash. Yeah, it would have never dawned on me to think I could abbreviate them. But yeah, it's cool. So that was the first tip that I thought I would include there. Also, I'm curious to know what your answer would be here. If I said, hey, do a a directory give me a count of all the files in that directory how might you go about doing it if you were in like linux or or mac
Starting point is 02:11:12 what's your way of doing it do you have a preferred way i always get the word count or whatever no i don't do that i always look up there's a command that... All right, you already took too long because you had to look it up. I always look it up. Yeah. I'm saying off the top of my head, I do exactly what Jay-Z said. I would have done an ls space minus l pipe to wc space minus l. So what that would do is that would do a directory listing by line, hence the dash L. And then when I pipe it to WC, WC is a word count,
Starting point is 02:11:47 but I'm to pipe, I'm passing in the dash L parameter to tell it to count the lines, not the words. And that would have been my, that's been my hacky way for years of counting, you know, the number of files in say a directory, for example,
Starting point is 02:12:02 D U is a D U. No, D U would, would, would would would uh give you like a usage disk usage yeah there's there's a yeah anyway go ahead there's another one that i've never heard of nl nl so you can which i love it because it's so much shorter you can just type in you know how you know how like yep you You know how there's, especially like if you have O-M-Y-Z shell or if you're on Linux, then you probably already have like an alias for L-L, right? So you could do L-L pipe N-L and you're done.
Starting point is 02:12:41 And the beauty of it is it depends on whether or not, you know, now your mileage may vary if you like the output from it, because in the, in the WC example that Joe and I both use, then your output is going to be just a number. And that is the number of files. Whereas what NL is going to return back is the very first line will be the
Starting point is 02:13:02 number of files. And then it'll give you file one, two, it'll give you a numbered list which is what the nl stands for it'll give you back a numbered list of all the things right which depending on how many files you have in there it might like scroll off your screen and if it's a real lot and you know a whole lot it might like you know blow past the buffer of your your shell so it might you know you might have to pipe it to more or something to be able to actually see it but uh i thought that was pretty cool that was like i'm gonna have to remember that one here's a cool one that i didn't know about on mac os did you know that
Starting point is 02:13:37 there's power metrics as a command so you you can like just doetrics-h to see all the help documentation for it. But they give a specific example here where you can, I'll say it, but it's going to be much to keep up with. But powermetrics-samplers smc, then pipe that to grep for CPU die temperature. And you can watch the temperature of your CPU from the command line. That's pretty cool. So that's just one of the things that you could get from this. But the point being is that with the power metrics, if you wanted to on your Mac,
Starting point is 02:14:19 get, you know, some, uh, data about what, what's going on, you could. Maybe you want to shell that out somewhere
Starting point is 02:14:29 or log that for some reason or alert something. I don't know. Okay, how about this one? I didn't know about this one, but did you know what the bang bang does on the command line? No. not anymore. It repeats whatever you last did.
Starting point is 02:14:49 So if you typed in pseudo bang bang, it's going to repeat. It'll, it'll fill in the command line with whatever you let your last pseudo command, for example. Oh, nice. Or in my LL example,
Starting point is 02:15:03 you're like, Hey, what was that? I typed in LL something. You could just like LL space, bang, nice. Or in my LL example, you're like, Hey, what was that? I typed in LL something. You could just like LL space, bang, bang. And it would, it would finish it out for you. Now it doesn't run it. It doesn't, it leaves it in edit mode for you to be able to edit the command, but it's pretty cool because especially in like our world of Kubernetes with super long Kubernetes commands, or even like what gets me is I'm always doing, um, we've talked about in the past how you can do a control R in your terminal to like
Starting point is 02:15:31 search your terminal. So I'm constantly like control R. What was that mini kube command I did before? Uh, what's that eval command I did for mini kube before? Uh, like, uh, what's that? How did I specifically run scaffold last time? Like I'm constantly doing those types of commands and I'm always using a control R to do it, but not with this. You could just type in like mini cube, bang, bang. And as long as it was your last one, then that's what you're going to get. Yeah, that's nice. But maybe, maybe you did multiple mini cube commands in the last, you the last 10 lines or 10 executions, and you don't remember which.
Starting point is 02:16:10 And rather than doing the Control-R, you just want to see them, you can do History-10. Hey, real quick, though. Reading this thing, the bang-bang, it doesn't sound like it'll run the last. You said if you were to type minikube bang bang then it would run the last minikube command you had from what i'm reading here it says that the bang bang runs the very last command that you had so right so if so yeah so that's that's why i was making the distinction of the history minus 10 because Because if you do bang bang with no other,
Starting point is 02:16:46 nothing else, it will just do the, whatever the last was. But if you do many cube, bang, bang does the last minute. I wasn't ever saying to do bang, bang by itself.
Starting point is 02:16:54 I was saying to do like, let's say, let's say I do many cubes, some command, Alice, some command, DER, some command.
Starting point is 02:17:00 And then I'm like, Oh, what was that? Many cube one I did. And I just type in many cube space, bang, bang. It'll fill in the command line with whatever the last minikube command was that I did the last one.
Starting point is 02:17:11 But that's why I was transitioning to history minus 10, for example, because like, what if there were several minikube commands that I did? And rather than doing control R, I just want to see them all. So history minus 10, we'll just show you, here's the last 10 commands you did or whatever number you give it. I'm giving it minus 10, but it would give you your, your last commands. So I'm curious to see how this works because they're describing it differently. So, so for instance, um, let's say that, um, you were doing something that usually requires you to do pseudo, right? Like, um, I can't think of anything right off the top of my
Starting point is 02:17:46 head but let's say that you were going to open an application on mac and it's like hey give me your password right i don't know what they're saying is if you typed in that command and it's like hey you need to use sudo what i'm reading here is it says you can do you can type in sudo space bang bang and it'll run the very last command that you ran but it'll put sudo in front of it that's what it sounds like what they're saying you see what i'm saying so like if i said ls let's say that i was logged into linux as a non um sudo user and i went to ls a directory and it's like hey you don't have access well Well, I need to pseudo LS that same command. You can do pseudo space,
Starting point is 02:18:27 bang, bang. And it'll run the very last command that you did, except it will run it as pseudo at the beginning. That's what I'm reading. You know what? Okay. I apologize.
Starting point is 02:18:39 I misinterpreted that. Thank you. Because I was, I, I have, it happened to be when I read that, I was like, Oh sweet,
Starting point is 02:18:46 let me go try this out. But it was pseudo commands that I was experimenting with. Okay. So you're right. It will, it will put pseudo in front of whatever the previous command was. Right. So,
Starting point is 02:18:59 so if you had like this big long thing out, like I've done this in the past when I was trying that and it didn't do that. I can think of things like where I was having to do a disc clone or something in Mac and they were super long commands and I'd forget to put pseudo in front. And then it was like, typically what I do is I'd hit the up arrow to bring back up the old one. And then I'd hit control a to go to the beginning line. And then I'd type the up arrow to bring back up the old one and then I'd hit ctrl a to go to the beginning line then I'd type in sudo space oh no to get it and they're saying that you don't have to do that bang bang is the last command the very last command which in in in what you're reading is
Starting point is 02:19:37 like where they're putting sudo and then doing bang bang which is putting which is how sudo is getting in front of it right they're executing the last command as sudo. Yeah. We were both, or at least my interpretation of what you're saying was mistaken, but I was definitely wrong in all of that related to the bang-bang. But basically the bang-bang was the last command. So if you wanted to repeat your last command with sudo, then you could just type in sudo and then bang-bang and right away you go.
Starting point is 02:20:03 Or you could just do bang, bang, and hit enter, and I guess it would bring up the very last command, right? Yeah. Yeah, except I'm noticing that on Mac I could have sworn it didn't, like, it left it in edit mode, but I'm noticing that on, I swear I didn't see this before in Ubuntu, but now it's, like, actually executing it. Or maybe that's because I needed a tab or something.
Starting point is 02:20:26 No, I don't know. Um, all right. Well, the mysteries of bang bang still amaze us. Uh, don't even get us started on JavaScript.
Starting point is 02:20:34 Bang, bang. Uh, um, yeah. Okay. So, uh,
Starting point is 02:20:39 where did I leave off? Oh, okay. How about this? So keyboard shortcuts on your command line. So control a takes you to the start of the line and E takes you to the end. L control L clears your screen rather than typing clear screen. I can't tell you how many times, like it's been habit. I'll just type in like CLR on like a windows environment or like,
Starting point is 02:21:07 you know, uh, clear on a, on a Linux CLS. Yeah. Yeah. CLS. Sorry.
Starting point is 02:21:12 What did I say? CLR. Yeah. Whatever. That was, uh, or clear on that. Yeah.
Starting point is 02:21:17 Well, yeah, I know because I do it all the time until someone recently told me on a stream about control. Yeah. I never knew about that, but did you know about these control you and control K? Do you know what those do? Control you empties the line. I don't know
Starting point is 02:21:32 what control K does. So control you cuts everything backward from the cursor and control K cuts everything after the cursor. Oh, so it's actually putting on the clipboard. Uh, you know, I say the cut part, but now I want to test that or maybe it removes. Okay. So control you,
Starting point is 02:21:54 I've always used to empty it. If my cursor was at the end, I thought that's all it did was delete the line. I never thought that it did it from the cursor back. That's interesting. Now I'm going from, well, that might be because I'm going from there. So let That's interesting. Now I'm going from, well, that might be because I'm going from there.
Starting point is 02:22:06 So let me try this. Yeah, it's not at least on, it could be because of a, like windows terminal and windows and Ubuntu and the facade that, uh, of WSL that maybe the clipboard thing isn't working or there. Cause if it is putting on the clipboard,
Starting point is 02:22:21 I'm not seeing that work on, uh, Ubuntu via WSL. So for me, but, um, and then, uh, you can use the option arrow keys to like move around words, you know, left and right. Um, let's see, what was the other one? Most interesting one. Was that it? Oh, maybe that was it control k that's interesting i never tried that one yeah that was the one i really liked the control u and control k because there have been times where i've like gone backwards and i'm like hey i wanted to change this i only needed like the first 18 characters or whatever and it's like oh yeah
Starting point is 02:23:00 instead of just holding the delete key i can control K boom, everything to the right is gone. Like it. And you could kind of remember, cause like the U key is to the left of the K key, you know, depending on if you have a, what, what,
Starting point is 02:23:17 what do you call those keys that you, you've been doing on your keyboard reviews where it's like lined up like columnar columnar. Some people, they like to also i've heard them orthogonal or or or no or yes i don't know i have to look it up every time yeah that and bang bang will never understand um okay well that's all i had that was my 18 tips of the week and uh hope you've enjoyed You know, maybe you like that website. I don't know.
Starting point is 02:23:47 Uh, but I'll have links to it regardless. Yeah. And you know, uh, Hey, if you, if you haven't already,
Starting point is 02:23:54 uh, subscribe to us, maybe you're just listening because somebody pointed you out a URL. We greatly appreciate it. If, uh, you did take the time and even more so, uh,
Starting point is 02:24:02 like Alan asked earlier, if you haven't left us a review, we super appreciate those. Uh, you can find some helpful links at the w w dot coding blocks.net slash review. TM. While you're up there,
Starting point is 02:24:16 go ahead and check out the show notes, examples, discussions, and more a, and you can send your feedback questions and rants to our Slack channel. And if you're not in our Slack channel, the plugin that we had that would allow you to automatically get added there no longer works, unfortunately.
Starting point is 02:24:31 So DM us or email us or go to our contact page and hit us up and we will get you added in there. And what's up outlaw? You thought I forgot about this, huh? You thought I forgot that you ambushed me at the beginning. Now what's up? I ambushed back. I don't really have anything to say other than
Starting point is 02:24:48 the usual stuff. So be sure to follow us on Twitter at CodingBlocks or head over to CodingBlocks.net and you can find all our social links at the top of the page. Ha! Ha! Ha! The show's not over yet. I was just kidding. I got more tips to talk about. Mic drop.

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