diff --git a/shipit/ship-it-124.md b/shipit/ship-it-124.md index bbca0448..fc54c3eb 100644 --- a/shipit/ship-it-124.md +++ b/shipit/ship-it-124.md @@ -52,7 +52,7 @@ **Dave Eddy:** Well, listen, at my last job I did a lot of JavaScript, and my hair was very short. So there is some truth to that. -**Autumn Nash:** \[00:08:06.17\] He's like "There's a correlation, y'all. There's a correlation." +**Autumn Nash:** \[08:06\] He's like "There's a correlation, y'all. There's a correlation." **Dave Eddy:** Absolutely. @@ -92,7 +92,7 @@ So yeah, that's how it started... It got really good reactions from people, and **Justin Garrison:** I actually just really appreciate the double hook there of like "You Suck at Programming", but also "Let's dive into Bash." That, again, to me was just like "I'm here. Hold on a second. I want more of this." And your path really reminded me - I did an internal ZSH program or ZSH shell workshop at my old job, and I ended up going to a conference and giving that workshop, and I have a get repo called "Mastering ZSH" that's been around for a long time, which was - I tried to call out all the things that were different. Like, "Here's Bash. Everyone knows Bash", and it was right around the time macOS switched to ZSH. I did it just before that, and I was just like "Oh, I've been using ZSH for years, and here's the unique things about it. Here's what might trip you up if you're coming from Bash, and here's some cool things that you can't do in Bash, that might make it worth switching if you want to." And that, for me, just led into like more and more people like "Oh, the ZSH thing's great. How do you do that?" I don't know, I've just started -- I still write all my scripts in Bash, though. Interactive shell is different than the thing that I want to run and automate over time. -**Dave Eddy:** \[00:12:16.09\] That's so true. And I kind of want to point people to that, because I get questions all the time, "How does this differ from ZSH? Why didn't you choose ZSH?" And it's like, because I was using Bash before ZSH was like everywhere. I just don't know it. And then, of course, the comment's like "So why do you hate ZSH?" I was like "I've never said I hated it. That's a crazy thing to deduce." +**Dave Eddy:** \[12:16\] That's so true. And I kind of want to point people to that, because I get questions all the time, "How does this differ from ZSH? Why didn't you choose ZSH?" And it's like, because I was using Bash before ZSH was like everywhere. I just don't know it. And then, of course, the comment's like "So why do you hate ZSH?" I was like "I've never said I hated it. That's a crazy thing to deduce." **Justin Garrison:** Yeah. "I love waffles." "Why do you hate pancakes?" It's not how this works. It's okay. @@ -138,7 +138,7 @@ Actually, I don't know what day this podcast will come out, but I can tell you r **Dave Eddy:** Oh man, I will go the extra 10 miles if it means committing to the bit. I am absolutely here to just go in hard. Like, if you were to ask me "Dave, is Bash the best programming language?" I'd be like "Well, there's all sorts of languages. They're all good for different use cases, and it depends on what you're trying to do." But if you really ask me "Dave, is Bash the best programming language?" I'd be like "Absolutely it is. Nothing even comes close." So of course I'm going to -- when I get to make my use of programming content, I get to turn my personality up to 11, and that's kind of the reason I do it... Where it's like "Why am I able to curl your website and get this data in like plain text?" It's like "Why wouldn't you be able to do that?" Of course you're able to do that. It's my content. Of course you could do that. So I like that. Bragging rights. -**Justin Garrison:** \[00:16:21.22\] And to the point earlier about like JavaScript - I'm pretty sure there's more Bash written than JavaScripts in the world, of just like people at terminals in history files. That's like - you're writing code, and I always feel this knee-jerk like "Oh, people say it's not a programming language." Actually, I've written a lot of bad things in Bash... And still, to this day, if I'm prototyping something, I'm going to write it in Bash the first time, just because it's going to be the fastest way for me to do it. What's something you regret writing at Bash? +**Justin Garrison:** \[16:21\] And to the point earlier about like JavaScript - I'm pretty sure there's more Bash written than JavaScripts in the world, of just like people at terminals in history files. That's like - you're writing code, and I always feel this knee-jerk like "Oh, people say it's not a programming language." Actually, I've written a lot of bad things in Bash... And still, to this day, if I'm prototyping something, I'm going to write it in Bash the first time, just because it's going to be the fastest way for me to do it. What's something you regret writing at Bash? **Dave Eddy:** Oh, man... Regret. It's so funny, I don't actually regret writing anything in Bash, because like you mentioned, I kind of reach for it first, and then if something evolves beyond Bash or needs something that Bash doesn't have... So this would be like very strict data types, or being able to parse structured data, like JSON or something... Something where I don't want to rely on an external tool like JQ... That's when it grows up, and it gets to go to a different language. An example of this would be on Void Linux, which is the distribution of Linux I really like... I wrote a piece of software called vsv, and it shows you all of your services, and if they're running, you can restart them. It's kind of like a nice wrapper. If you're on like Ubuntu, think of like systemctl, but like a nice version of that. A nicer version. I'm not saying it's not nice. I don't like systemctl, but I'm not throwing that in right now... \[laughs\] @@ -150,7 +150,7 @@ But no, so I wrote that and it was originally in Bash, and then I needed somethi But then when it came down to Rust, I can tell you a quick little story... 2020, end of 2020, I quit my job and went unemployed, by choice. I was burnt out, I'd been working for like 10 years at that point, and I just wanted some time off. I had some money saved up... End of 2020, people weren't doing much anyway, so I was just kind of hanging out at home. So I took a little bit of a staycation for about a year and a half, and focused on music, and kind of just put programming aside. I was like "I'm just burnt out. I can't even think about it." And I had this moment where I -- I actually wondered, I was like "Am I washed up?" Like, I'm seeing all these job things, if I want to get back on the market - they're talking about Rust, and Rust is the new language. And I tried to learn it at one point, and it's hard. It's very complicated. It makes no sense to me. The syntax is difficult, the borrow checker hates me, I can't get anything to compile... I'm reading these things it's like "Oh, don't worry. You just have a lifetime over here, and a reference over --" I'm like, "I'm lost. I don't know what this is like. I know how to malloc, and I know how to use JavaScript. I'm out of my element here." But then I just sort of made it a challenge. I know it sounds weird... I got the Rust book, and I just sat down, and I was like "No, I'm a smart guy. I can learn this." -\[00:20:20.13\] So it was like 2021 when I really went heads down and doing it, and started writing software just to get better at it. And then I think about, I don't know, six months after that, I was like "Not only did I learn this, I like this. This is like my new favorite language." I really, really like Rust... So yeah, I became one of those Rust bros that they talk about now. +\[20:20\] So it was like 2021 when I really went heads down and doing it, and started writing software just to get better at it. And then I think about, I don't know, six months after that, I was like "Not only did I learn this, I like this. This is like my new favorite language." I really, really like Rust... So yeah, I became one of those Rust bros that they talk about now. So yeah, that's kind of how I got into it. And then when there were jobs opening up, when they wanted people who knew Rust, they were okay if you only knew a little bit of Rust, and I actually knew more than most jobs even needed, so I was like "Oh, this is perfect. This is great." @@ -164,7 +164,7 @@ For Rust, I absolutely love the ecosystem. Like, crates and cargo is so fantasti But that was definitely something that -- to me, after reading the book, I'm like "I really like things about -- all the things I hate about Go, I like about Rust." But I'm more familiar with Go, to be able to write the software that I'm like "Oh, I'll just kind of deal with all the things I kind of hate in the ecosystem." I don't like go mod. I just don't. Cargo and crates is way better than that. I don't really like the compiler, all those things... I'm like "I want to like Rust in so many ways, and I just, I haven't done enough with it." -**Dave Eddy:** \[00:23:52.13\] Yeah, I definitely think that's interesting. I get a lot of comments like "Why would you do this instead of Go?" and the answer is "I just never dealt with Go." Like, it's as simple as that. I didn't avoid it, it just never came up organically. So I just jumped straight into Rust. I might have different views if I had started with something like Go. +**Dave Eddy:** \[23:52\] Yeah, I definitely think that's interesting. I get a lot of comments like "Why would you do this instead of Go?" and the answer is "I just never dealt with Go." Like, it's as simple as that. I didn't avoid it, it just never came up organically. So I just jumped straight into Rust. I might have different views if I had started with something like Go. Because I know Go gives you that -- almost like scripting language-like environment, but then it gives you the speed of like a compiled binary. And it has a lot of nice stuff built into it. With Rust I'd have to pull in like Tokyo if I wanted some sort of task managing thing that could manage threads and tasks that are abstractions on top of threads... I think Go has that built-in. It has like a green threading model where you have like goroutines. And then it actually has its own thing to manage like "Oh, you have a thousand Goroutines?" That might only be like a hundred threads, just example numbers. Whereas Go does all that stuff for you, so you don't have to think about it. I can just fire off every single request and a goroutine and "Hey, I'm good." I'm not going to exhaust the system of threads because the Go runtime is going to handle that for me. So definitely pros and cons. @@ -184,7 +184,7 @@ For me, it's difficult. I kind of start from the lower level. So when I see a hi But I get comments like this all the time, where people are like "Yeah, what do you think about Kubernetes?" Or my favorite, "What does your Kubernetes setup look like?" and I'm like "I've never touched it. I've absolutely never touched it." And they're like "How did you tech and you've never dealt with Kubernetes?" And I was like "People have been doing tech for more than --" When did Kubernetes come out? Nine years ago? I'm sorry to say it, but yeah... How am I doing it without Kubernetes? Easily. The way everyone's been doing it forever up until then. That's not a knock on Kubernetes. I'm just saying, it just hasn't come up in the kind of stuff that I deal with. So I get to avoid it. -**Break**: \[00:26:57.22\] +**Break**: \[26:57\] **Autumn Nash:** I think what you said earlier was like really spot on. People are always like "You don't use Kubernetes", and I'm like "Docker was like before Kubernetes, and people are still using Cobol, so..." @@ -208,7 +208,7 @@ I know it uses YAML, I think... That's about all I know about it. **Dave Eddy:** Oh, man. Yeah, Wasm is so interesting. I think about that so much. It's one of those things that's so poorly named, in my opinion... But like so many things are. If you want to make a web request on JavaScript, before you had fetch, you had - what, a new XML HTTP request, or whatever it was? Like, Ajax, asynchronous JavaScript and XML - terrible names, but really powerful what they enabled. Wasm, people are like "Oh, that's just some web thing." No, it's a virtual environment to run a limited assembly instruction set on multiple operating systems, multiple different browsers. It's great. You could make games in it... -\[00:33:56.25\] You can do so much, because you can compile directly to it. It's a limited set, but it's very well defined. Put an asterisk next to that, but... Like, it's defined, and that's awesome. So the idea of just having this Wasm blob that I could put on any different operating system, as long as we can translate it from those instructions to whatever your kernel syscalls are - it should just work. Great idea. I love Wasm. I think it's so cool. +\[33:56\] You can do so much, because you can compile directly to it. It's a limited set, but it's very well defined. Put an asterisk next to that, but... Like, it's defined, and that's awesome. So the idea of just having this Wasm blob that I could put on any different operating system, as long as we can translate it from those instructions to whatever your kernel syscalls are - it should just work. Great idea. I love Wasm. I think it's so cool. **Justin Garrison:** Now, explain to me... First of all, if you already have Illumos at home, you're writing some Rust... I thought everyone that runs those two things works at Oxide. Is that not the case? I thought that -- I was like "Everyone that I know that's like "Oh, we use Illumos and we write Rust" is like "Oh, they're Oxide fans", or they're working at Oxide already. @@ -284,7 +284,7 @@ I don't know if that'd be a place that I end up in the future. I think it'd be a **Justin Garrison:** I've never used it, but I just know it's where a lot of the systemd haters -- not haters necessarily; people that just wanted to avoid over-complex things. -**Dave Eddy:** \[00:38:01.19\] Yeah, pretty much. I mean, that's a good way of saying it. It's more than just a systemd-less operating system. There's a lot of reasons to do it. There's the -- I think you can get the GNU variant, or like the muscle version of like the libc, so you can have whatever floats your boat, basically. But this was around 2018 when I had switched over to like a ThinkPad laptop, and I wanted a Linux daily driver... That didn't last too long. I'm a Mac guy at heart, so I've got my MacBook and that's what I use. But I was looking for a good operating system, and I just was annoyed with using systemd on Ubuntu. I think before that - what did they have? Upstart, or something. I was just sick of all these-- +**Dave Eddy:** \[38:01\] Yeah, pretty much. I mean, that's a good way of saying it. It's more than just a systemd-less operating system. There's a lot of reasons to do it. There's the -- I think you can get the GNU variant, or like the muscle version of like the libc, so you can have whatever floats your boat, basically. But this was around 2018 when I had switched over to like a ThinkPad laptop, and I wanted a Linux daily driver... That didn't last too long. I'm a Mac guy at heart, so I've got my MacBook and that's what I use. But I was looking for a good operating system, and I just was annoyed with using systemd on Ubuntu. I think before that - what did they have? Upstart, or something. I was just sick of all these-- **Justin Garrison:** Upstart was terrible, too. @@ -302,7 +302,7 @@ I don't know if that'd be a place that I end up in the future. I think it'd be a **Dave Eddy:** Not really... Close in the sense that it's very simple, but it's not like -- you don't have the etsyinit.d scripts, you don't have any of that stuff. You still have like etsyrclocal, things like that, but... When you want to make a Daemon on the system, you make a directory with the name of the Daemon, and you create a file on it called run. As long as run is executable - that's it. That will get executed. If it fails, it'll get retried every second. -It logs to like standard out of the process that it's going to, or standard error. I'd have to double check, but you can also make a logging process, so each thing can log to its own process. You could send it to syslog, you could send it to a file, log it to like a temp directory... So it's one of those things where if you hear "Oh, it's just a service manager, but you configure everything through shell scripts", if that resonates with you, then it's absolutely the right distribution. +It logs to like STDOUT of the process that it's going to, or STDERR. I'd have to double check, but you can also make a logging process, so each thing can log to its own process. You could send it to syslog, you could send it to a file, log it to like a temp directory... So it's one of those things where if you hear "Oh, it's just a service manager, but you configure everything through shell scripts", if that resonates with you, then it's absolutely the right distribution. **Justin Garrison:** I like systemd. I actually think that running it, in certain cases -- the way you can like add to things, and add overlays for services... I really like how they manage some of that. I do think it does a lot. But I actually hated SysVinit. Like, I did not like all of the Bash scripts. I didn't like numbering them 0 through 99 to make sure that my startup was in order, and then when I shut it down, the driver got unloaded at the right -- that, it felt like they took Bash too far. And I was like "You should have switched at some point to Rust, or something." But how much is runit like that? Is it this one folder of all my Bash scripts, I just throw in there and I could do whatever I want? It's "simple" because it's all my own Bash scripts, or it's a little more structured than that? @@ -316,7 +316,7 @@ So yeah, if you start looking in the core services, they're numbered. But you re **Dave Eddy:** No, I don't know what that is. -**Justin Garrison:** \[00:42:04.27\] Not being a -- since you don't write Go, I was assuming not, but it was literally just, it's a Linux distro that just runs a Go binary is what they... I think it can run other binaries if you just shove it on it, but there's no init system. It's PID 1, your thing. +**Justin Garrison:** \[42:04\] Not being a -- since you don't write Go, I was assuming not, but it was literally just, it's a Linux distro that just runs a Go binary is what they... I think it can run other binaries if you just shove it on it, but there's no init system. It's PID 1, your thing. **Dave Eddy:** Cool. @@ -340,11 +340,11 @@ And yeah, I love the like single-purpose sort of Linux distros, and ones that ju **Justin Garrison:** It's honestly a thing I think that Bash does really well. Like, because Bash -- it has a lot of hidden things, and it does a lot of things that are complex and convoluted if you have not tripped over them before. But getting started, you get a terminal, I can literally type help and it just like lists out a bunch of stuff. I can read all of the docs. They provide enough information to get you started... But productizing Bash would be a bad idea, because you're like, you should strip away all the things you don't need, and you're like "Oh, actually, I don't want all these built-ins. Maybe I should move to a different language and strip out some of that stuff, and only use the libraries that I should be importing." It's the same thing with systems. They just get so complex. But the easy to get started method of like "Hey, here's the hello world, and now here's Kubernetes" is not the introduction that you want. -**Dave Eddy:** \[00:45:59.18\] Oh man, yeah, there's so much there to jump off on. On Autumn's point, the first thing I think about is -- this is a weird analogy, but I think about video games that come out where they have like a character you can play, and there's character customization... There are some people that will spend five hours in there, customizing their character... And then I jump into a game like that, I'm like \[unintelligible 00:46:15.18\] I don't care. Random. Please." +**Dave Eddy:** \[45:59\] Oh man, yeah, there's so much there to jump off on. On Autumn's point, the first thing I think about is -- this is a weird analogy, but I think about video games that come out where they have like a character you can play, and there's character customization... There are some people that will spend five hours in there, customizing their character... And then I jump into a game like that, I'm like \[unintelligible 00:46:15.18\] I don't care. Random. Please." And when you're talking about that - yeah, tech can be daunting. There can be so much configuration you can do. You can get lost in configs, and rc files, and learning everything... Or you can say "I want a desktop that just works." And this is why when people ask me "What distribution of Linux would you recommend, Dave, for learning? Like Void Linux?" I'm like "No. If you're putting it on your desktop, go with Ubuntu. Go with something real simple." Just get your feet wet. Learn how to open a terminal once. Once you get comfortable with that, then we can talk about a different Linux distribution where you might be living in the terminal... But yeah, "Just get started" usually is like some of the best advice. But yeah, when you have something like complex Kubernetes, you kind of look at how the world, you look at Kubernetes like "Wait, what happened here? How did we get from this to that?" -**Break**: \[00:47:01.26\] +**Break**: \[47:01\] **Justin Garrison:** Where do you go to learn? What are your sources for "I need to go dive into this thing"? Are you reaching for books like the Rust book? Or are you just finding more YouTube channels? What is the kind of process there? How do you learn something new? @@ -380,7 +380,7 @@ And it's like, yeah, that's how I'm going to spend my time. I can figure out why **Justin Garrison:** I always start with "Imagine your hard drive was really, really small, and you had to mount some other file system to get that command. What would you do?" "Oh, that's when they wrote this?" "Yes. This is exactly when they wrote this." -**Dave Eddy:** \[00:53:52.05\] Yeah. One that I've been seeing lately on my channel, I was talking about where files are stored for executables on Linux. /bin, /sbin, /usr/bin, /usr/sbin... And they're like "Why are they all just in one directory?" I'm like "Well, they are now." There are some operating systems that are trying to unify it all. "Why weren't they in the past?" It's like, well, think about how much storage space you have. If you're a system administrator, you might only need the sbin commands. You might just want to mount a specific partition. I don't know if that's the reason, I wasn't doing computing back then, but like in the 1970s and 1980s, I could absolutely imagine that. So it's cool context that I can only look up now, but I love talking to people that are like older than me, where they can give me insight into it. +**Dave Eddy:** \[53:52\] Yeah. One that I've been seeing lately on my channel, I was talking about where files are stored for executables on Linux. /bin, /sbin, /usr/bin, /usr/sbin... And they're like "Why are they all just in one directory?" I'm like "Well, they are now." There are some operating systems that are trying to unify it all. "Why weren't they in the past?" It's like, well, think about how much storage space you have. If you're a system administrator, you might only need the sbin commands. You might just want to mount a specific partition. I don't know if that's the reason, I wasn't doing computing back then, but like in the 1970s and 1980s, I could absolutely imagine that. So it's cool context that I can only look up now, but I love talking to people that are like older than me, where they can give me insight into it. **Justin Garrison:** Oh yeah, absolutely. There's so many good podcasts and books and everything else that are fantastic. I just watched this YouTube video that you reminded me of... And I'm going to put it in the channel, but I think you would love it. It was like "The bits between the bits" is what it was called. And it was all about what happens when you're compiling -- it was a C program. I think it was C, not C++. And how did this variable get set? And it goes directly into "Well, here's main... But let's look at the assembly and figure out what it actually did in that." I was like "This is fantastic." I love this stuff. @@ -416,7 +416,7 @@ And it stinks, because they start at the top, they try to work their way down... **Dave Eddy:** Yeah, thank you so much for having me. This is really awesome. You can find me online in a couple of places. The easiest way would be just to look up "You Suck at Programming." You'll find my YouTube, you'll find my Instagram, you'll find my TikTok. If that doesn't work for you, go to my website, daveeddy.com, or ysap.sh. You can go ahead and curl that in your terminal and it will render just fine. It also works in the browser, but it looks a lot cooler in the terminal. -**Justin Garrison:** \[00:58:16.14\] It does. +**Justin Garrison:** \[58:16\] It does. **Dave Eddy:** So yeah. So that's where you can find me.