Dave Eddy has learned systems programming the traditional way with books and man pages. Now he’s sharing what he’s learned, starting with bash.
Featuring
Sponsors
System Initiative – The future of DevOps automation (is here!) — System Initiative is an intuitive, powerful, collaborative replacement for Infrastructure as Code (IaC). The free tier is awesome (no credit card required) and you can get started in 3 clicks.
Fly.io – The home of Changelog.com — Deploy your apps close to your users — global Anycast load-balancing, zero-configuration private networking, hardware isolation, and instant WireGuard VPN connections. Push-button deployments that scale to thousands of instances. Check out the speedrun to get started in minutes.
Bitwarden – Secrets management for developers. Leverage trusted open source technology to securely store and manage infrastructure secrets. Bitwarden empowers developers to safely inject secrets into code and prevent costly data breaches with ease.
Notes & Links
Chapters
Chapter Number | Chapter Start Time | Chapter Title | Chapter Duration |
1 | 00:00 | This is Ship It! | 00:53 |
2 | 00:53 | Sponsor: System Initiative | 03:31 |
3 | 04:31 | You don't look like a JS dev | 04:27 |
4 | 08:58 | You suck at programming | 04:37 |
5 | 13:36 | Dave's hobbies | 01:16 |
6 | 14:52 | Going the extra mile | 01:33 |
7 | 16:25 | What not to write in Bash | 02:12 |
8 | 18:37 | Moving to Rust | 02:15 |
9 | 20:52 | Reason for Rust | 03:55 |
10 | 24:46 | Avoiding containers & escape hatches | 02:11 |
11 | 27:04 | Sponsor: Fly | 03:31 |
12 | 30:39 | Sharing Linux kernel | 02:24 |
13 | 33:03 | WASM is well-defined* | 01:18 |
14 | 34:21 | Everyone who uses illumos works at Oxide | 03:27 |
15 | 37:48 | Void Linux | 02:34 |
16 | 40:22 | Runit structure | 01:40 |
17 | 42:02 | Gokrazy | 02:33 |
18 | 44:35 | Finding your niche | 02:25 |
19 | 47:14 | Sponsor: Bitwarden | 03:10 |
20 | 50:26 | Learning resources | 06:38 |
21 | 57:03 | Embedded systems | 00:45 |
22 | 57:48 | Wrapping up | 04:16 |
23 | 1:02:04 | Outro | 00:52 |
Transcript
Play the audio to listen along while you enjoy the transcript. 🎧
Hello and welcome to Ship It, the podcast all about what happens after you git push. I’m your host, Justin Garrison, and with me as always is Autumn Nash. How’s it going, Autumn?
I’m so tired.
But it’s almost fall. And so fall is good for being tired, right?
It’s spooky season, and I can’t wait to bust out all the sweaters, and yummy baked goods, and blankets, and just… I’m so excited.
You’re doing that and I’m buying projects. I bought some LEDs to make some spooky decorations that I can make motion sensors and individually address them…
This is why you need to just live next door, so I can hang out with Beth and so you can decorate my house.
Okay… Well, it’s a project I started last year, and I bought a bunch of stuff for and I didn’t finish, and so I went a different route this year, and I’m going to try to finish it before decorations are due.
I love your neuro-spicy ADHD.
All the specialties.
Oh, my God. Okay, I’ve had a skeleton in my frontyard since July… It’s a gigantic skeleton.
It’s the giant Costco ones, right?
It makes me so happy. No, it’s the one that’s coming out of the ground. I want a 15-footer. I’m stalking those Facebook groups, and like… Can a girl just get a 12-foot skeleton? Is it that hard? There was a meme the other day, and it was like waiting for a husband and wife to get divorced so a husband will be mad at his wife and sell her 12-foot skeleton, and I was like…
Find a cheap secondhand.
Yeah. I was like “That’s so horrible.” Also, I’d still buy it. That’s not nice, people, but I would buy it though.
Surprisingly, this isn’t what we’re here for today. We have Dave Eddy as a guest here. Dave, welcome to the show.
Hey, how’s it going? Thank you for having me.
So we were talking a little bit in the pre-show about just how this started… And I’ve found you on TikTok, good old For You page somehow knew that I love Bash. Your video showed up, and you say, “Hi, I’m Dave, and You Suck at Programming.” And I’m just going to be honest, that immediately stabbed me in the chest… Because I know I suck at programming.
You’re just out here hurting people’s feelings.
It was just a harsh start, and I’m like, “I don’t want to watch this, because it’s going to be that I do suck at, and I know I suck at.” At first, I was like “This is going to be a JavaScript talk”, because I’m terrible at JavaScript. But then I saw you, I saw your face. I’m like “You don’t look like a JavaScript developer.”
[laughs]
You’ve got the beard, you’ve got the long hair… This didn’t look like the route I was going, so “I’m going to hear you out for another second.” Once you dove into like “This is Bash…” I don’t remember what it was. I forget what the first video I saw was, but it was something like exit codes, or… It wasn’t traps, but something along those lines. Like “This is a Bash script. This is how we do star globbing”, or something like that. I’m like “Oh yeah, this is real programming. This is what I’m here for.”
[laughs] Oh man, that’s fantastic. That’s the best thing I’ve ever heard.
Wait, can we unpack the sentence you said there? First of all, every JavaScript developer ever is so offended right now… He said real programming. The gloves are off. We are - what, two minutes into this podcast? He’s offending half the nation.
It’s so funny, because none of that registered to me. I was like “This all sounds fine. I’m following. Yup, keep going.”
“Story checks out.”
Also, I love that Justin was like “He’s got a beard and a long hair. He can’t be a JavaScript –” What do JavaScript developers look like?
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.
[08:06] He’s like “There’s a correlation, y’all. There’s a correlation.”
Absolutely.
We’ve had Paul on the show. He was JavaScript, and he just – you look… I don’t want to say you look nicer, it’s just, you look like your life hasn’t fallen apart yet.
[unintelligible 00:08:16.21] Are you saying this is what Bash does to you? Because I kind of want to co-sign that. I don’t know… I don’t have a beard, but I do have long – I don’t know.
No, this is real though. I get comments all the time where people are like “No offense, but you look like you would know Bash.” And I was like “Why’d you have to say “No offense”? That would have been a fine sentence without saying “No offense.” Why’d you have to add that?”
Why do people say “No offense” like that’s going to make it better, whatever they’re going to say…?
“No offense, this is rough, okay?”
It makes it so much worse. You’re just like “But why?”
Yeah. “I wouldn’t have taken offense, but now that you’ve said it…”
I question, like…
And everything about You Suck at Programming, the thing you’ve been doing, immediately transferred to me when - I think it was like three or six months later, when you started talking about Rust. And I’m like “Oh wow, now the story really checks out. This is completely valid.” But tell us, why did you start You Suck at Programming? Why is that the bit you started with, and what made you want to do this?
Sure, yeah, I can jump into it. I started around two years ago, actually, at this time. It was 2022 when I uploaded my first programming video. Before that, I was making music. I do piano music, guitar, stuff like that… And I had a TikTok, but it was just for fun. I was just uploading some music stuff, browsing memes with friends… It was never anything serious. I wasn’t doing any sort of content creation, really. But then it was two years ago I did a presentation at my job where I went over some cool little Bash features, and everyone was like “Dave, that was awesome. You should do this. You should upload this to YouTube, or something.” I was like “Not this one because, because the company owns it, or whatever.” “But make your own and upload them to YouTube.” I was like “You know what? I should try doing that. That’d be kind of fun.” So it was 2022, I uploaded my first one, and I was like “How could I make this funny? What could I do?” And I was like “Well, I’ve got to come out of the gate swinging. I’ve got to come out –” I don’t even know why I came up with it, but I just – I looked at the camera and I was like “Yo, what’s up, everyone? My name’s Dave and You Suck at Programming. Alright, today we’re going to jump in with Bash.” And once I had that, I was like “This is it. That is what all my content is going to be going forward.”
And yeah, I wanted to get under people’s skin just a little bit, where I was like “Let’s talk about programming”, and then open up right away with Bash scripting. So already I’m getting comments like “This isn’t programming”, and I’m like “Let’s go. Keep commenting, guys…” This video has almost got a million views on TikTok, so like… Let’s go. Let’s go. Keep commenting.
So yeah, that’s how it started… It got really good reactions from people, and then I was like “You know what? I like talking about programming. I know this stuff. I might as well just share it and make this content.” It’s fun. So yeah, that’s the story. That’s the road.
I loved that you used the Elon sauce, and was like “I’m going to offend you.”
It’s just engagement. Engagement hacking. Any social media, especially for your page, AI-driven, sort of automated stuff… Like, if it’s not a thumbnail, you have to get them another way… And an offense is a great way to get a hook, right?
Oh, absolutely.
I just think that it’s funny that we know that now, and we’ve accepted it.
Oh, yeah.
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.
[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.”
Yeah. “I love waffles.” “Why do you hate pancakes?” It’s not how this works. It’s okay.
I love that. It’s so perfect.
I think people really think that those are like the only options, and I’m like “It’s really not that serious, guys. It’s just, like, you’ve been doing one longer. That’s it.”
100%. I get this with text editors… People ask me what I use, I’m like “Oh, yeah, I code in Vim.” And they’re like “Oh, so you hate Emacs? Didn’t you mention you hate Emacs?” I was like “I’ve never said that.” I don’t hate any editor. They’re just tools. I use Makita instead of Milwaukee when it comes to my drills. I don’t care. It’s a drill. Like, it’s a text editor. My identity is not roped into it. I don’t care.
Some people’s identities really are roped into it, though…
100%. Yup.
It’s wild.
It’s okay to not have your identity be tied to a tool, or a job, or… You can just have a different identity outside of that.
Yup. And you can spot it so easily when someone gets defensive when someone uses something that they don’t use, and it’s like “Who cares?” I can’t imagine caring about this. It’s crazy to me. It’s a text editor. It’s a scripting language. Use whatever one you’re comfortable with.
Speaking of identity, you said you started with music… And I’ve only recently started listening to your music. Great piano music, just kind of background [unintelligible 00:13:40.23]
Well, thank you.
But also, you do a bunch of woodworking too, right?
Yes.
You’re usually in your garage, and you’re like – a bunch of wood everywhere. What other hobbies do you have?
It’s so funny you would say that. My first live stream I did on Instagram, a month ago now, I was just in my garage in front of the woodworking and people kept asking me questions. Like, “Do you guys really want to know about this? That’s crazy. I thought you guys were only here for the programming.” And everyone was like “This guy’s in a tank top, drinking a beer, talking about programming… Of course we’re interested.” I was like “Alright, yeah…” I mean, now that I look back, I’m like “Yeah, that is pretty cool.” That live stream goes pretty hard. Yeah, I agree. But yeah, no, the woodworking is a big thing… I mean, even now, we’re in the living room of my house… That ceiling, this beam up there, I faced that all in pine, I put that ceiling up… The table that I’m sitting at right now, I built this desk… I just, I like to build things. Trying to think of other fun hobbies. Usually, it’s just piano, woodworking, programming… Those are kind of like the big three. I’m sure there’s more I’m forgetting.
Actually, I don’t know what day this podcast will come out, but I can tell you right now when we’re done I’m about to head to Best Buy so I can pick up the new Zelda game. So I’m gonna be playing that for a while. So that’s definitely something I’m interested in.
Nice. So you have this You Suck at Programming kind of like - almost like a meme now, in some cases. That’s the brand that you’re kind of doing all of this under. You’ve been doing it on multiple social media accounts, but also, your website, when – I don’t remember when I saw it, but you said you can just curl the website. I’m like “No, you can’t. Like, you did not…” And you can curl ysap.com. Is it –
sh.
sh. Of course it’s sh. Oh, my God. Of course.
.sh. Of course.
But you can curl it and you get the plain text, with the links, everything else. I did that once. Like, nginx, config… I want people to curl this, and you can just find the agent, and then send them the text file instead of the HTML. And it’s a fantastic little Easter egg. And when I did, I’m like “Now I’m stuck. I have to watch more of your videos, I have to do more of this.” Why are you going the extra mile for those types of things, when this is kind of a meme and it’s for fun?
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.
[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?
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]
But no, so I wrote that and it was originally in Bash, and then I needed something faster. I just needed it to execute in parallel, I needed it to make it work on a Raspberry Pi, and have it go quickly… So that’s when I switched it over and wrote it in Rust. So that’s kind of – I don’t regret writing it in Bash, it’s just Bash is a good starting point. So that’s kind of how I view it.
I’ve had three rules for myself, ever since I wrote too many wrappers in Bash. My rules for when a script grows up or moves to a general-purpose language is either it grows more than 100 lines… I don’t include comments, because comments are usually half of the script anyway. But more than 100 lines, more than two arguments, or anytime I have to mess with an array. Once I’m in a Bash array, I’m like “I’ve made a mistake, and I just want raw – I want the actual data, and I want to be able to process this better than trying to use an associative array in Bash.” And so those have been my three rules for a long time, that I’m like “I’m going to stop writing Bash now and I’m going to move over to” - usually Python or Go, but I’m curious to know why or when you started going into Rust.
Oh, it’s so funny you would say that… Before I get into the Rust thing, just jumping off what you said right there - you reminded me of a question that someone asked me… Basically, how do I know when it’s time to leave Bash? And I told them, I was like, I just sort of have a line in the sand. Once I get too complex, I switch over. And I was like “But reading your comment, it sounds like my line in the sand is just a little bit further than yours is.” And I don’t mean that in a judging way, I just mean like I’m comfortable with mangling arrays in Bash. But I know when I need nested data structures, or arrays of arrays… I’m like “I can’t do this.” Like, you actually can’t; Bash can’t nest arrays. So that’s just a good example of something you’re just not able to do.
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.”
[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.”
Is there a reason why you picked Rust, besides the fact that you learned it, over Python? Because usually when I feel like something’s too complex for Bash, I go to Python, because it’s like kind of a – to me it’s like my go-to other scripting language… But is it just because you were like already learning Rust, or do you like it better than Python for other reasons, or…?
I have a couple answers to that, actually. I learned Python like 10 years ago, but I only know it decently well. I’m not super-great at Python. But for me, I sort of view Python and Rust differently. Python’s for scripting, and Rust is my compiled language, so I can get closer with like lower-level system stuff. I can pull in the Nix crate and just deal with like Unix directly. Whereas Python - you can do that a little bit, but it’s more abstracted. Python’s way better suited for scripting. If someone told me a script needs to be a script, and it’s outgrowing Bash, I think Python makes perfect sense. Even like JavaScript, if you wanted to run it with like a Node.js or whatever, any of the newer ones that people really like, where you can have JavaScript on the server - I think that stuff’s really cool. But just for me personally, if I wasn’t going to do it in Bash, I might reach for C first… So Rust kind of replaced C for me in a lot of places. So that’s a more logical thing. If Rust was going to replace Python, I think you would need more of a reason. Like, I think performance would probably have to be the biggest reason why you’d want that. Or if you’re dealing with like low-level things, you want memory safety, certain things like that.
For me, moving off of Bash is usually a question of “I need someone else to also run this”, which is why once I have an array or I have more than two args, I’m like “Someone else is going to mess this up”, because they don’t have the same assumptions that I have going into it. And once I have to give someone else software, I want it to be compatible everywhere, and that’s where Bash is fantastic, because it is pretty much everywhere. Or a compiled language, because I’m like “I don’t want them to deal with Python environments, or ENV”, anything, if they’re like “I need to modify this”, I’m like “No, I’m giving you a compiled binary. You can run it; if you want to do something else with it, go over here, do this, actually modify it.”
For Rust, I absolutely love the ecosystem. Like, crates and cargo is so fantastic. The compiler is wonderful. But I had the exact opposite kind of reaction to reading the Rust book, right around the same time. I think it was during COVID. I was like “I’m going to read the Rust book”, because I wanted to learn a new language. And I finished reading it, I’m like “I don’t want this.” At the end, I was like “I don’t feel like a good programmer”, because there was so much stuff that I didn’t understand. And I know I learn better by actually doing it, and I should have had projects to like actually implement it, and try some of the things, and fail at it in – not just reading it on a page.
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.”
[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.
I mean, I know a lot of people that got into Go because of containers and Docker and Kubernetes, and that whole space that was already written in Go… And they’re like “Oh, if I’m going to modify or wrap this stuff, I’m going to use those libraries anyway… So I’m going to learn it.” How have you managed to avoid all that stuff? How have you been able to – it seems like a completely different world. If you’re doing C and Rust, you don’t even need containers, and it’s wonderful. If you’re just over here like “I have binaries. I just run binaries.”
Yeah, containers definitely come in handy. They’re used in a lot of different places, but I can kind of just avoid them usually, because I’m installing things – if you’re doing like a firmware upgrade or something, you’re not really doing it in a container, you need to have bare metal access to the machine. Certain things like that.
I have done firmware updates from containers. I don’t recommend it.
Okay. Fair enough. Yeah.
It was the first time that I’ve really found the flexibility of Kubernetes in a bad way, where I deployed a daemon set that upgraded the firmware on all the servers… And I was like “This worked.” I was terrified the entire time. But also, that Kubernetes thing gives me the escape hatches that I kind of wanted. Whereas I can just mount the devices in, and – because it was a Red Hat container, I was running on CoreOS, and I was like “None of these things line up”, but I installed the RPM, flashed the firmware, and the system rebooted, and things were working… But I don’t recommend it.
Actually, I think you touched on something really, really important there… You said that it gave you the escape hatches that you want. I think one of these things is frameworks work so long as you’re willing to work with them. So if you’re willing to work with Kubernetes, then you can trust all that stuff and you can know “Oh, I have the escape hatch that I want.”
For me, it’s difficult. I kind of start from the lower level. So when I see a high level abstraction like that, I’m like “My escape hatch is like kill -9.” My escape hatch is just stopping this. And if that doesn’t work, or there’s something weird going on, then I don’t really know what I’m gonna do.
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: [26:57]
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…”
Yeah. It’s interesting to talk about people too just with Docker in general, where they’re like “Yeah, Linux containers.”
I was like “Yeah, I remember that.” Lxc, you have Linux containers in the kernel, and like Docker, and they’re like “I don’t think Docker uses [unintelligible 00:31:00.28] Well, it doesn’t now; it changed, and now it has like lib container… And people are like “Wait, what are you talking about?” I was like “How do you–” I mean, I say “How do you not know that?”, but it’s actually okay. I understand why you don’t know that. It’s a higher level abstraction, and you get to live in that abstraction and use the framework. That’s great. That’s why we can get more people to do this stuff. I think it’s awesome. But it’s just, it’s funny to me, where I’m like, I love learning about the underlying technology. I want to know how these containers work…
Linux is interesting. I don’t even know Linux the best in terms of kernels but there’s like cgroups, there’s namespaces… There’s so much that goes on there. But when it comes to the higher level software like Kubernetes, I don’t know.
I know it uses YAML, I think… That’s about all I know about it.
It’s amazing.
Yup.
People forget about like cgroups in general. I wrote cgroup namespace processes before I ran containers. And I think one of my least favorite things about Kubernetes’ success is the fact that lxc kind of disappeared. And I thought lxc had so many great use cases. And I like that it exists still in Proxmox. There’s these environments that – like, Proxmox you can get a full VM, hardware virtualized, get you a new kind of BIOS-level thing. But also, you can just run an lxc container, and you’re like “Oh, this will boot a system” with sharing the kernel. And I think that’s fantastic, because I want that to exist. But I don’t think Ubuntu did well by lxc by making lxd, and then making all these things on top of it and trying to make it its own. Ubuntu really wanted a Kubernetes competitor with lxc, and they just they went off and did their own thing.
Yeah, it’s cool. This technology is super-interesting. I use Illumos servers at home, which is the open source fork of Open Solaris. I have some FreeBSD… So people in these worlds, they’ve already known about this forever. Solaris has zones. Illumos has zones. That’s their software virtualization. FreeBSD has jails. So you get virtualization. You get your own little mini operating system, but it’s the same kernel, it’s the same PID space, same file descriptor space… So it’s really, really lightweight. You can spin them up and tear them down immediately, because they’re just very, very small containers. Yeah, container is just a word that’s been expanded to mean anything, so… I think it’s important to kind of drill in and say “What specifically do you mean?”
A lot of times I wonder if Illumos was more popular, if things like Wasm would be as popular… Because the Illumos stuff with zones was like kind of along those lines, it felt like. It’s less of a container and more of a Wasm wrapper.
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…
[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.
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.
Can I rewrite your talk bios to say “Also throw shade constantly”?
That’s not shade. Oxide’s great.
You have like the pettiest, shadiest tech takes. I think your TikTok channel needs to have a Justin shade of the week, because I will actually start showing up to your videos and like –
Now that I don’t work for enterprises, I can just be a little more honest about some things. It’s fine.
I love the shade. I think it’s great.
But do you see how he keeps rubbing it in?
I didn’t throw shade there. That wasn’t shade.
See? The shade just comes out of him at this point. Do you see this? This is what I deal with.
I 100% see it. Oh yeah, now that I don’t work at enterprise companies… Oh, sorry. That’s my print being done over there…
I know…! Worst friend ever. Like, let me just rub in… He’s always like “I don’t have a million meetings today”, and I’m like…
So, Dave…
So yes, yes. Back on track.
Why don’t you work on Oxide yet?
Oxide is awesome. I think they’re doing really cool stuff. I have a lot of friends that I know that work there. I talk to people that work at Oxide. Really cool stuff. Really awesome. A lot of the people that are at Oxide came from Joyent before that, so a lot of Illumos stuff, a lot of stuff like that going on.
I don’t know if that’d be a place that I end up in the future. I think it’d be a great company to work for. Maybe I’ll apply if they have any sort of job openings… But right now, I’m happy with my current situation. I have no real reason to move. But I will say this… If I were to quit my job anytime soon, Oxide would be the first place I applied. 100%, hands down. They’re great people, smart people, doing really, really cool work. So yeah. And Illumos/Rust - natural fit.
Do you hear that, Oxide? Offer Dave a bunch of money.
Did you listen to the On The Metal podcast they had?
Oh, absolutely.
That was such a great history lesson of what the world of tech was like… And I love the interviews they had. Even the current one they have, Oxide and Friends, is really good.
Oh, yeah.
But I love the history side of technology, and On The Metal was just so great.
I love that, too. Okay, you drink Dr. Pepper, but if you ever want a good book, like tech history, or like to go down a rabbit hole, he’s the best friend ever. Like, all of a sudden he’ll be like “And then I read this one book about this, this and that”, and you’re just like [unintelligible 00:37:03.07] and I’m going to go read all those books.
I try to summarize it so you don’t have to. Same with white papers. That’s one of the reasons I read white papers.
Being friends with him is like getting homework a lot though… Because all of a sudden I have like six books –
I know, I don’t want to do that.
No, but he’s also like downloading information, because all of a sudden he’s like “And then this one dude created –” What’s that? The – I think he did the SHAs. But also, his hobby was unicycles. And I was like “I don’t know what to do with this information, but I love it.”
That’s cool.
I don’t remember what the book was called, but yes, no, that was a fantastic one.
Also, he picks out your fun lunch places to go when you go to conferences…
As long as you have Dr. Pepper, it’s fine.
I just throw Dr. Pepper at him, and then he picks us a place to go to lunch. Hanging out with him is fun.
That’s great.
Dave, can you explain Void Linux to me?
Sure.
Void Linux? What is Void Linux?
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.
[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–
Upstart was terrible, too.
Oh, a hundred percent.
Upstart was worse than systemd, in my opinion.
Absolutely. There’s a lot of things I don’t love about systemd, but I think it actually – it is what it’s trying to be. It is a like service manager… It starts up your services in order, it has a lot of good dependencies… It does some of the stuff that it does really well. I’m not a systemd hater, it just does more than I need it to do. So I wanted something that was very thin, something that just got out of my way. And I was looking for different distributions of Linux, and I came across – I think it was like Alpine, Void Linux… And Void stuck out to me because it used Runit as its service manager. And that was loosely based on a different service manager called like Daemon tools… And I really, really liked Daemon tools.
I don’t know Daemon tools.
Oh yeah, Daemon tools is really cool. It’s just a super-simple thing. If you use Daemon tools, then you go over to run it, you’ll see “Oh, these were absolutely – one was inspired by the other.” You can see it.
How close is that to like SysVinit?
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 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.
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?
Oh, it’s more structured than that. There’s gonna be a directory, I think it’s like /var/service, and inside there you just make a directory for whatever daemon you want, and then you give it a run script, and whatever’s in that will get executed. They don’t necessarily have the concept of dependencies, but you can tell one service to wait on another service. So you can make like a “I don’t want this service to start. I don’t want X to start until Y is started.”
But then there’s this concept of core services, and core services would be like networking, file systems, things that need to be up… And those are exactly the thing you hate. They’re numbered. They’re just absolutely numbered scripts that execute in that order. And I totally get why that can be annoying, because you’re not really defining dependencies, you’re just defining ordering… But when I look at it, I’m like “This is so simple. I love it.”
So yeah, if you start looking in the core services, they’re numbered. But you really don’t need to. If you’re just running your own user-level services, services where you don’t care, you know the file system’s up, the networking’s up… It’s great for that. I think it’s so simple.
Have you ever looked at Go Crazy?
No, I don’t know what that is.
[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.
Cool.
It’s meant for Raspberry Pi’s. “I have one thing. This computer is going to run one service, and when I want to upgrade it–” I think it has a wrapper around it to do upgrades and whatnot, so that you can actually push it out… But it’s just like, yeah, we just send it back out to the console as whatever your logs are for your thing. We don’t have any init system beyond that to be able to – but I love that minimization of, like, I want that thing just to do one thing alone, and I’m going to leave it over there… And I could carve it up in a virtual machine, I could put it in a lxe container, I could do whatever I want to make that as simple as possible, so I understand the wrapper. And I think containers were on that path, and things got complicated.
Yeah, they always seem to. That seems like the fate of all software. But no, I love that idea. I think that’s so cool. I think people forget this… When it comes to just CPUs in general, people are like “The CPU is not good for this, not good for this.” It’s like, it’s not really good for anything. It’s for general computing. It can get everything done. If you were to talk about that abstraction from hardware and bring it to software, it’s like - well, the Linux kernel, or this distribution, it’s good at being a computer. It can run a desktop manager, it can run a browser, it can run audio, networking… It does everything. But if you don’t need that, and you can just strip all that down and just give it like one process, “You do this one thing”, you can get amazing performance out of it. And I think that’s great. If you know your use case, strip out the stuff you don’t need, and just target that.
And that’s not only better performance, but also just like better understanding of the system when it breaks. You’re like “I don’t have 50 different places to look, because this is one thing.” And I work at Sidero, we run Talos Linux, which is literally like PID 1 as an API server. And there’s no SSH. You send things to a gRPC API, and it’s just like “Here’s your spec, and now do the thing.” And the more things we can minimize out of that, which is like – it’s running Kubernetes… Kubernetes is complex enough. Don’t put all the systemd and cloud in it and everything else under the cover to like get there. Just strip away all that other stuff.
And yeah, I love the like single-purpose sort of Linux distros, and ones that just find their niche, and they’re like “This is what we do. We are not general-purpose.”
Yeah, exactly.
I run Bluefin on my desktop. I think it’s a great Linux distro, but it’s a desktop Linux distro that does all the things that I need, and can be as complex as I want it to be.
Yeah.
At first when you get into software, there’s so many different choices, right? Like, there’s simple stuff, there’s more really like deep, and tons of options, you know? But I think now the longer you’re in software, you realize that those things all have their place, because sometimes you want to be super-picky, and play around with all the settings and do all that, and sometimes you’re like “Dude, I just need to get work done, and I just want it to be as simple as possible.” So I’m grateful that they have all those options, but trying to figure out how to learn all those options - it is like really daunting when you first get in software, until a couple of years later when you’re like “Okay, I get it.”
Yeah, a hundred percent.
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.
[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: [47:01]
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?
I’d have to think about like what specifically I’m trying to learn… But I sort of have like the cheat code. I know Autumn mentioned you reading books by cheat code… I actually read the man pages. I say that jokingly, but a lot of people are like “Dave, how do you know so much about Bash?” I was like “Well, if you go to the man page…” They’re like “Whoa, whoa, whoa… I didn’t want that. I just wanted your knowledge without the work” and I was like “Oh, okay. Yeah, good luck.”
“Alright, well, here’s a pager, and go run this.” And that’s the other option.
Yup. I’ve even written my own software, where it’s like… I was showing off a piece of software I wrote in C, and they’re like “So how does it work under the hood?” I was like “Well, here’s a 300-line block comment at the top of the C file. There’s ASCII diagrams in it. Go read it. That’s how it works.” And that’s like the end of the comment chain. It’s like, okay, well… That’s fine.
“Nevermind.”
Yeah, yeah, yeah. “Oh, I didn’t realize that I wouldn’t immediately get it in two seconds.” So to answer your question, I like to go to the source first, if I can. That’s a confusing way of saying it, because it sounds like I’m saying the source code. I’m not saying that. I like to go to the documentation source. So if there’s like a man page for command, I’ll go to that. If it’s a new language, I love the books. I love the Rust book. Beyond that, if I’m trying to learn something new - I mean… I’m not above doing what other programmers do. I’ll hit up Google and be like “Alright, how to make array this programming language”? I do that as well, and then I get some Stack Overflow thing. So yeah, just like a mixture of all that.
Do you still google how to for loop in Bash?
No, no. [laughs]
That’s like the bar of like “How well do you know Bash? Do you have to google the for loop?” And it was probably like four or five years ago that I stopped having to Google it. I’m like, I don’t know if this is a good thing or a bad thing.
Yup.
But we’re here, and this is just how it’s going to be.
That became like a little bit of a meme in my community, actually… Someone commented, they were like “I know you couldn’t write array handling in Bash without like googling it.” And I responded, I was like “I don’t know who you know you’re talking to, buddy. I do know how to do that, and I don’t even think that’s that impressive.” I tried to be humble about it. It’s like, I use it all the time. I do know how to do it. I could go to a whiteboard. And everyone was like “Please, record yourself at a whiteboard.” So I did the live stream, I bust out the whiteboard, I started writing Bash by hand… And they’re like “Oh my God, is this valid?” It’s like, “Of course it is. I know it is. I’ve been doing this forever.”
But yeah, it’s hard to mix that “I’m confident in what I know”, but I don’t want to come across as like arrogant. Like, I do try to be humble about it. It’s tough with a name like “You Suck at Programming”, but…
But just remembering how long it took you to learn that, and like putting in the work, and reading the man pages. Same thing for learning systems. I go read the white papers. Because almost every big system came out of some research that they wrote a white paper about. And I’m like “Oh, I’m gonna go find the white paper. I’m going to read it.”
And it’s like, yeah, that’s how I’m going to spend my time. I can figure out why they wrote the thing. What answer were they trying to solve? The man pages are going to give you that stuff. Like, “Oh, these are the built-ins, because we have to have this set. We don’t want to execute out to something else, because it may not be there, and we need to build that into the shell.” And that’s where it’s something like “Oh, that’s the problem you’re solving. Now, why would I want to execute out to a different command for that same functionality?” “Okay, let’s figure it out.”
Yeah. That’s the other thing too, is even just like the history of it is important. People ask certain questions like “Why is this an external command when it’s built-in?” It’s like “Well, that wasn’t always built in.” I mean, yeah. [unintelligible 00:53:36.27]
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.”
[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.
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.
That’s cool.
So yeah, I’m going to put that in the show notes and I’ll send it to you.
Awesome. Yeah, yeah, that’d be great. Yeah, I recommend to some people when they ask about learning like systems and C and stuff, I tell them to go to the K & R C book… And one of the things they do in there is like writing malloc from scratch. Like, how do you actually write a memory allocator? And I’m like “This is useful knowledge to have.” You should know how memory is allocated to your process, how your process can increase its heap size, break pointer, things like that… It comes in handy in ways that you wouldn’t even expect it to. Once you understand how these underlying systems work, you just have the abstractions in your brain, where when I look at larger systems, I’m like “Oh yeah, it’s just like how an operating system does it.” They’re like “No, no, it’s completely novel.” I’m like “No, it’s not. It’s really not.”
Nothing’s really novel. It’s the same problems over and over again if you abstract enough things away.
One million percent. Yes, that’s the truest thing.
And some people just – you don’t have to go into the details, so you think that everything below you is magic. And at some point you’re like “No, actually, electrons are going through a gate. How they did that? Let’s see…”
Oh, this is something I deal with, too. One comment basically was like a punch to the stomach. I didn’t expect it. It wasn’t a bad comment, but someone said “Man, I would love to have the knowledge you have, but I’m afraid to touch a low-level language like C.” And I was “C is a high-level language, man.” I know what they meant, but it took me back at first. And I was like, I hate that for people like just getting started with tech - they start at such a high level that they have to like dig down like an archeologist to try and dredge up these things. It’s like, no, people are still writing that. You don’t have to guess how C was written. It’s still being written.
And it stinks, because they start at the top, they try to work their way down… It’s like “No, no, you’ve got to start at the bottom.” You mentioned like electrons, and gates and stuff like that. If you start at that level and work your way up, you start to appreciate everything so much more. You learn basic and/or, like flip-flops… When you learn those kinds of gates and logic that way and how it’s actually stored, static, dynamic, all that stuff you start to appreciate all of the instruction sets we have, and all of the higher-level language. The fact that I can write a while loop, and have these gates actually acted out for me - that’s amazing, the amount of stuff that has to go right for that to work.
Do you do any embedded systems or like FPGAs? Any of that stuff?
I don’t. I’ve done a little bit of like soldering stuff, but that’s about it. Like, I’ve hacked the original Xbox, put the little mod chip in there… I’ve taken apart the little [unintelligible 00:57:18.01] game and watch Nintendo thing and added bigger storage, so that was a fun little solder project… But besides that, no, I don’t typically deal with those kinds of systems. I think they’re really cool, they’re just outside of my realm of knowledge.
Yeah.
Your eyes lit up when I mentioned the Xbox…
I’ve watched some FPGA videos, and I’m just like “I can’t do this. Like, this is too much”, but I love it. But yeah, Xbox modding is what mostly put me through some of college. Modding people’s Xboxes, and doing it for myself, and… Yeah.
Yeah, I think you said that in like a comment or something on one of my videos. It’s so cool.
Dave, thanks so much for coming on the show and talking to us all about why we suck at programming and Bash. Where can people find you online?
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.
[58:16] It does.
So yeah. So that’s where you can find me.
Can confirm. If you’re listening to this in your car, pull over, pull up that terminal emulator on your Android phone or whatever you have, try to curl it. It looks great.
Also, find his cringe script video on TikTok, because I laughed so hard.
Thank you so much. Yes, I have a lot of videos where I will go over different scripts that people do, or submit, or even ones that I’ll make up and pretend that other people have submitted. I don’t actually pretend, I just straight up about it. But I will say, I’m not shy when I call scripts cringe and minor-based. Alright? You have to remember that. Most people write cringe stuff, I write really good stuff.
Dude, I was like dying. I was like “He did not write a whole script and make it cringe, and then like every level it went down, it got funnier…” I was like “I can’t with him.” I was like, I’d definitely be his friend.
Oh, that’s so nice. Thank you. Heck yeah. You know what? I’ll drink some coffee now that we’re friends. I’ll try it.
Now you’re the odd person out, Justin. What now? What now?
That’s right.
I tried coffee the other week. It was like a non-coffee thing. I’m like “No.” I couldn’t, I couldn’t even –
Why did you do it without me? Like, we need to go find – we need to go to one of those…
It just tastes bad.
No, we need to go at like a Starbucks roastery or something, or like a –
The coffee tastes bad.
Wait, Justin. Hear me out. Gosh. We need to go and get you like a whole flight of different stuff and figure out what you like. What about a cold brew milkshake? It’s a milkshake.
If it has a coffee flavor, I don’t like it. It’s the same thing with alcohol. I don’t drink alcohol. It tastes bad.
I don’t drink alcohol either. But coffee is amazing. What is wrong with you? You’re broken.
I agree with this so much. People are like –
Dave, you’re my friend.
This has like a s’mores chocolate taste. It’s like, yeah, but it has a coffee taste too, so…
Yeah, I know. It’s like, the other flavor in there… Yeah, I don’t like that one.
Yeah. I agree, 100%.
And - side quest on drinks. Like, they’re also just so expensive.
Oh my God, yeah.
And I’m just like, you know what? If I don’t like the taste of the coffee or the alcohol, I’m not going to drink it. I can just go have something – like, you know what? Like, bars give me free cherry Cokes. Because it’s like “Oh, you’re the designated driver.” I’m like “Yeah, that’s it. I’m the DD.”
That’s right.
Okay, but when there’s coffee drinks mixed with other flavors, I get mad, because I just want it to taste like coffee.
No, the coffee is the bad part.
That’s insane. That’s insane. Yeah, the coffee is the bad part.
Also, I don’t drink alcohol because I’d rather save the calories for like Cinnabons, or like things that taste good.
There’s better uses of those calories.
Yes. Like, I’m just like, “Y’all do that, and I’m going to get dessert. And then I’ll like judge you drunk people and drive you home after.”
Yeah, that’s fine.
I just give my drink tickets to friends.
Oh yeah, absolutely. And you make more friends that way, too.
You make so many friends that way.
Every conference. “Here you go. You want a drink ticket?”
I’ve made so many friends. I’m just like “Do you want another drink?” And then I sit there, stuffing my face with all the nachos and food. I show up to tech stuff for food. I’m like “Who’s going to feed me?”
Give away the drink voucher and be like “I’ve earned these calories.”
If it’s between brownies or a Cinnabon or nachos and a drink, I am a hundred percent going to get a strawberry lemonade and go live my best life with that brownie or like nachos or something.
Free idea for every conference - give out taco tickets.
Look, I would show up. Like, I plan whole vacations around food and show up to weddings for the cake. Okay? Like, I want to go to Italy to just eat my way through it. I’ll be like “Oh, look at the pretty building”, and like shove pasta in my face.
Awesome. Okay, well, thank you so much, Dave, for coming to the show. We’ll talk to you again soon.
Awesome. Yeah, thank you so much. Thank you for having me.
Our transcripts are open source on GitHub. Improvements are welcome. 💚