The Changelog: Software Development, Open Source - There’s a TUI for that (Friends)

Episode Date: July 19, 2024

Nick Janetakis is back and this time we're talking about TUIs (text-based user interfaces) — some we've tried and some we plan to try. All are collected from Justin Garrison's Awesome TUIs repo on G...itHub. This episode is "AI free."

Transcript
Discussion (0)
Starting point is 00:00:00 This is ChangeLog and Friends, our weekly talk show about text-based user interfaces, a.k.a. TUIs. A massive thank you to our friends and partners at Fly.io. Deploy your app near your users. That's what the cool kids do. Make it happen at Fly.io. Okay, let's talk about Tooey's. What's up, friends? I'm here with Dave Rosenthal, CTO of Sentry.
Starting point is 00:00:41 So, Dave, when I look at Sentry, I see you driving towards full application health, error monitoring where things began, session replay, being able to replay a view of the interface a user had going on when they experienced an issue with full tracing, full data, the advancements you're making with tracing and profiling, cron monitoring, co-coverage, user feedback, and just tons of integrations. Give me a glimpse into the inevitable future. What are you driving towards? Yeah, one of the things that we're seeing is that in the past,
Starting point is 00:01:13 people had separate systems where they had like logs on servers, written files. They were maybe sending some metrics to Datadog or something like that or some other system. They were monitoring for errors with some product, maybe it was Sentry. But more and more what we see is people want all of these sources of telemetry logically tied together somehow. And that's really what we're pursuing at Sentry now. We have this concept of a trace ID,
Starting point is 00:01:37 which is kind of a key that ties together all of the pieces of data that are associated with the user action. So if a user loads a webpage, we want to tie together all the server requests that happened, any errors that happened, any metrics that were collected. And what that allows on the back end, you don't just have to look at like three different graphs and sort of line them up in time and try to draw your own conclusions. You can actually like analyze and slice and dice the data and say,
Starting point is 00:02:04 hey, what did this metric look like for people with this operating system versus this metric look like for people with this operating system and actually get into those details. So this kind of idea of tying all of the telemetry data together using this concept of a trace ID or basically some key, I think is a big win for developers trying to diagnose and debug real world systems in something that is, we're kind of charged the path for that for everybody. Okay.
Starting point is 00:02:31 Let's see you get there. Let's see you get there tomorrow. Yeah. Perfectly. How will systems be different? How will teams be different as a result? Yeah. I mean, I guess again, I'll just keep saying it maybe, but I think it kind of goes back
Starting point is 00:02:42 to this debugability experience. When you are digging into an issue, you know, having a sort of a richer data model that's, you know, your logs are structured. They're sort of this hierarchical structure with spans. And not only is it just the spans that are structured, they're tied to errors, they're tied to other things. So when you have the data model that's kind of interconnected, it opens up all different kinds of analysis that were just kind of either very manual before, kind of guessing that maybe this log was, you know, happened at the same time as this other thing, or were just impossible. We get excited not only about the new kinds of issues that we can detect with that interconnected data model, but also just for every issue that we
Starting point is 00:03:20 do detect, how easy it is to get to the bottom of it. I love it. Okay, so they mean it when they say code breaks, fix it faster with Sentry. More than 100,000 growing teams use Sentry to find problems fast, and you can too. Learn more at Sentry.io. That's S-E-N-T-R-Y.io. And use our code CHANGELOG. Get $100 off the team plan. That's almost four months free for you to try out Sentry. Once again, Sentry.io. So we're hanging out with Nick Jantakis. He's flying close to the sun with only 2.5 gigabytes of hard drive space. Nick, do you like to live dangerously or what's going on over there?
Starting point is 00:04:04 Yeah, I must say I do. You must. I'm over here sitting on like three and a half terabytes, I think, of available space. So, you know, at this point I've gone all in with this idea of I'm going to keep this workstation alive until it no longer wants to be alive. So I'm at just under 10 years now with the same like first generation SSD. So what's the ultimate size on that? Well, the SSD is 250 gigs. I do have a one terabyte hard drive as well, just like an external one.
Starting point is 00:04:32 But that's also getting pretty full. Is this a system you built yourself? Yeah, just assorted parts off of, well, back then, Newegg and a little bit of Amazon. When's back then? Back then, like 2014. Dang, that's how old this machine is you're on? Yeah. I almost can't believe it too, because it's like, you know, I could buy a new one if I want to just part it out, build it. It's fun, but it's like, it just hasn't become a problem somehow. Like I can still record videos and day-to-day usage. Yeah. What's your CPU? It is a quad core
Starting point is 00:05:01 3.2 gigahertz. It's like an E4460, I think, an Intel one. You're missing out, man. Sorry about that. Sorry about that. Yeah, the last decade has been good in hardware advances, you know? Yeah, wait until you hear I have like a G4 750 Ti as my video card. Oh my goodness. That is an interesting one.
Starting point is 00:05:19 Yeah, I suppose. Well, you know, the new Intel CPUs generally have integrated GPUs, which is enough in most cases, really. Yeah. Nick wouldn't know. 14th Gen is sitting out there waiting for you to get it. I mean, 14th Gen is out there too, but riddled with Linux bugs, I'm sure, because it's latest gen. I'm excited for you, Nick, because A, we might kill that machine here today as we fill up its hard drive. But B, you're going to have the best upgrade of all time, aren't you? I mean, it's going to be amazing. It's going to be a good day.
Starting point is 00:05:48 That's like how Adam starves himself all day for that one meal. But that one meal is the best, isn't it, Adam? I mean, you really go after it. You know, man, I have to tell you, I've been like becoming a chef. Oh, yeah. Oh, yeah. That's all I'll say. I believe it.
Starting point is 00:06:02 I believe it. Nick's going to be a chef when it comes to building a recipe for his next machine uh nick i'm half tempted to to donate some ram to you or something bro well don't worry i've got 16 gigs okay well you got plenty of ram but does that ram scale to your next system like what what gen is that that ram even i couldn't even say the exact gen of the ram but the answer answer is no. Okay. This kind of reminds me of my very first MacBook Pro laptop, which was probably around the same time period. Now, it had to be before that, 2010. It was one of those big heavy honkers with a really nice keyboard. And I had a similar streak going, not how long can I run this thing, but how long could I go without rebooting my laptop?
Starting point is 00:06:48 At the time, I was traveling into the office to work every day, but I would never turn it off. I would just close the lid and open it back up, and I called it a server, and all my colleagues thought I was a dork, and I was, but I went over a year without rebooting that thing, which by the end of it, I mean, it was dogging. It was like the RAM, it was swapping. The RAM was gone.
Starting point is 00:07:09 It was like, please reboot me. But once I had the streak going, I didn't want to break it. Yeah, it's weird how streaks work. I had something similar happen with this machine actually. So this machine predates Windows 10, which is I'm running now. I used to run Windows 7 on there.
Starting point is 00:07:23 And at some point in time, security patches stopped and I wasn't getting auto-updated from Microsoft all the time. So yeah, I had something like 230 days of uptime, I think, on the machine. For a Windows box, it's like pretty decent because usually Windows would be like, by the way, I'm going to reboot on Friday and the next Tuesday. On Tuesdays. Was it Tuesdays? It's been
Starting point is 00:07:40 so long, I forget. Patch Tuesday, isn't it? Isn't that the big day on the Windows side? I believe so. Nick knows. Tuesday. I got an idea for you, though, Nick. You got enough followers and subs on YouTube. I think you could probably put a call out there for hardware folks.
Starting point is 00:07:59 Get Fractal Design to give you a case. Get so-and-so to give you a motherboard. Get so-and-so to give you a motherboard. Get so-and-so to give you some drives. And one brand only, of course. I'm sorry. I like Fractal Design. They're cool. So you want me to sell out?
Starting point is 00:08:14 No, I don't miss. No. That's not selling out. That's leveraging your channel, bro. You're missing out. There's good content waiting for you to build your next machine. All the choices you'll make as a bash scripter, a Vim master, a Docker dude, whatever you want to call yourself. I'm just
Starting point is 00:08:31 looking at all your keywords on your YouTube channel. You're missing out, man. Build yourself a new machine, use this promotion, get some friends, get some network. Boom. So here we go. YouTube video title, like how to pick the best motherboard to run Docker. Yeah. I mean, I don't think you really need to choose between motherboards to run Docker, do you? No. Okay, then.
Starting point is 00:08:58 Okay, just whatever's on the market. Anyways, you should do that. It's an idea. It's an idea. I don't think that's exactly nick's style of content you're more tutorial learn a thing opinion pieces right i think you're i've even seen you kind of reading some of your blog posts now on youtube is that a recent thing you started doing or you've been doing that a while you mean linking to the blog post from youtube no it's like here's a blog post and there's also a video oh right The video is effectively you either reading or summarizing the blog post.
Starting point is 00:09:26 I mean, it's almost like a audio transcript in video form and they link back and forth. Sometimes it depends, like certain posts I will write out beforehand, but a lot of times I'll just make the YouTube video first and then I'll just do the blog post after. But yeah, some of them, it makes sense to write it first. Yeah, I've been doing that style, I guess, maybe for like a year and a half, I want to say. And I was just figuring like, you know it would be interesting to see if that increases traffic to both
Starting point is 00:09:48 sites both YouTube and my own site just by having you know a little bit more content in my site right have you had any good results from that or are you so it's hard to tell because I also disabled Google Analytics so whenever they switched over
Starting point is 00:10:03 which I don't blame you about but how are you going to know switched over. Which I don't blame you about, but how are you going to know? I don't know. I don't know. All right. I don't know. All right. Maybe it's just a feeling. Like, you'll feel like it's worth it.
Starting point is 00:10:15 That's how I go on stuff a lot. I'm like, this feels right. Isn't there a plot hole we're missing out on here, Jared, though? Like, the last time we talked to Nick, he was changing. Right? He was, like, ending the podcast. I think even ending the blog and like moving on to something like a gig.
Starting point is 00:10:31 And that's true. I don't know, man. It's been so long that I don't remember it. Yeah. Yeah. No, you're right about the blog. So, or sorry, hold on. You're right about the podcast because I was running, running in production.com for a while, did a hundred plus episodes. And then, yeah, I just decided to call it quits on that one. But yeah, the blog and the YouTube channel, they're still going strong. Weekly posts. So you haven't changed at all? Since then, no. Interestingly though, I have done a lot of contract work
Starting point is 00:10:54 but one of the people I was working with, you know, they did invite me to work full time as like an SRE slash like DevOps engineer slash developer advocate slash whatever you want to classify that role as. The do all the things person. Yes. The run things in production person that's right oh man and how'd that go yeah that's actually going pretty good it's interesting because you know it's like a a nine to six type of job but it kind of feels like i was working you know similar hours doing
Starting point is 00:11:21 contract work beforehand anyways and now it's just like consolidated into one company, which has, you know, it's pros and cons, right? If the company decides to let you off or something happens, you only have one revenue stream, but so far so good. And you have courses still in play? You're still doing courses or no? Keeping those up to date. Still need to make some new ones.
Starting point is 00:11:41 There's been a deploy course in the works now since like 1935. Older than your computer. You might miss out because there's a lot of non-deployment happening. Yeah. People ain't shipping. No. He's slowing down because he can't, you know, he has to slow down to keep up with his computer.
Starting point is 00:11:56 He just can't go with it. That's right. Do you have any pain from that? Like, I mean, you're rendering videos, you're doing stuff. I mean, do you ever be like, I could wait. I remember when we upgraded to the M star, I think ours are M1s. My mix down inside of Adobe Audition
Starting point is 00:12:11 went from like four minutes to like between 30 seconds and 45 seconds. I mean, it was enough where I don't get as distracted now as I did because you gotta waste five minutes waiting for that thing. Especially when you mess up, you gotta remix down. But do you have any of that where you're like, man, I'm just literally watching this thing spin for video takes even longer than audio, obviously.
Starting point is 00:12:32 Right. No, if that were the case, I would upgrade it a long time ago. So you're right. Definitely. Like the video encoding is going to be so much faster on a new machine, probably like a 10 X difference. But, you know, let's say I record a 15 minute YouTube video and maybe that takes like 25 minutes to render.
Starting point is 00:12:45 You know, I like to walk a lot. I also sleep and eat meals and stuff. So I'll just like render that video when I know I'm going away for an hour. I'll just sleep. Yeah. During your rendering, you're encoding, he takes a nap, you know. Right. This is the exact reason why people upgrade.
Starting point is 00:13:00 I spend my whole, my whole life is optimized around me doing different things when I need to render a video. He has things. Am I rendering? Okay, cool. Time to do it. It's like a forced Pomodoro technique. He's like, I got 25 minutes. I got to go.
Starting point is 00:13:13 I'm the same, Jared. I have the iMac Pro at home as my kind of work home desktop thing that I use. I thought I would use a lot more for like, okay, I don't have to go somewhere else and basically just do my work. I don't have to go and you know somewhere else and basically just do my work i don't have to go and record so i can just like edit this show here sure nah man on that intel mac the mix down was like too slow 15 minutes like unbearable right 15 minutes no thank you when i can like spend a minute and a half at most on my M1 Mac, forget it. I know.
Starting point is 00:13:46 Now, this is maybe a controversial take, but this work computer that I have too is separate. So the company issued me an M2 Air, which is actually quite nice. It's super speedy and it's cool. But it's like, if I'm just browsing websites or doing like a Docker Compose up, it's really not that much different than my current machine. And I really feel like it's just having an SSD on both of them makes such a big difference like if i didn't have an ssd forget it would be like the end of the world you're probably not doing a lot of compression but i would say your video work is what would really tax the the gpu particularly and then probably the cpu as well
Starting point is 00:14:17 with some of that at least yeah it's certainly we're at a point now where common internet usage you got your vim you got your terminal you got your browser maybe you've got a music app running you're not really going to have much of a difference on brand new hardware versus you know i guess in your case 10 years ago although when you did get that put together it was pretty bleeding edge it seemed like or at least pretty good versus like an old machine that was also low quality at the time you're not going to notice as much i mean there's little things where like you tab away and you have to wait for like the window to actually swap those kind of things but really where the gains are is if you're doing heavy loads compiling test suites our test
Starting point is 00:15:01 suite also runs now again in under 10 seconds I think whereas on my old one it was like getting up to 30 seconds which of course you run that often enough that you're sitting there staring at it the old SKCD the obligatory SKCD I think it's 303 where they
Starting point is 00:15:20 excuses that they're compiling of course is why they're having a sword fight in the hallway sword fighting yeah so those are the things that you'll notice. But yeah, I mean, if you're going to go take a walk, I mean, you've got worker, I call that a workaround, but you know, it's a lifestyle workaround. So it's the best kind, right? Yeah. And it's funny too, because like, let's say I were to release a new course, a new video course that has like 75 videos that need to render. Like those, I'll just start that before I go to sleep. I do sleep a good seven, eight hours most nights. So it's like, by the time I wake up, they're all done. It's like a
Starting point is 00:15:48 gift just waiting there. All the, all the videos, I didn't have to do a single thing like waiting around. Does it ever fail in all the night or do you ever like realize you made a mistake and then you're like, ah, I gotta go to sleep again. Gotta sleep again. Yep. Go back to sleep. You know, I've never had a batch fail like that, but I mean, if it did, it is interesting, though, because if it did fail and I was planning to launch like two days from now or something, you know, that would have an effect like. But yeah, another quick use case just around upgrading. I mean, yeah, I would like to play a little bit more modern games. So I actually do like playing video games, you know, MMOs, FPS, et cetera.
Starting point is 00:16:19 And like nothing modern, you know, within reason is going to run my current machine. So I'm stuck like playing these like 2D platform games. Well, I'm in the same world as you because I play all my video games on Nintendo Switch, which is not modern hardware because they refuse to ship modern hardware. Nintendo does. And so all the games that look silky smooth on Xbox, they're all glitchy on Switch. But, you know, it's nostalgic and it's Nintendo. So I just live with it. Yeah, Actually, here's a, here's a dilemma for you. My biggest dilemma
Starting point is 00:16:49 around the next upgrade is like, well, do I actually want to go with another workstation that I build up from parts, run windows with like WSL, et cetera, maybe doable with Linux or something, or does one actually go with a laptop? And then it's kind of like, well, you can do everything from there. I mean, you know, parts are going to be a little bit worse, but you have the convenience of actually having the laptop. Because, man, did I run into some issues when, so Docker had this Captain Summit in Lisbon, Portugal last month. And, you know, I don't have a dedicated laptop, but I have this Chromebook that I modified
Starting point is 00:17:18 to run Linux. That's also like 10 years old, literally. And like, I can't even run Docker desktop. And it just became annoying to like sync files from my workstation onto there so I can like post a blog post from, you know, there. So yeah, I don't know. Where do you guys stand on that? Do you like this idea of like one machine to rule them all? You do all of your work and fun and all that, or do you have separate ones? Great question. So I think Adam and I differ on this to a certain extent. Go ahead, Adam. I'm pro laptop, honestly. Then I'm wrong. We do not differ.
Starting point is 00:17:46 Well, you've always had a desktop for a long time. Yeah, I did. But mainly because the iMac Pro was the latest thing you can buy that was good, I suppose, at that era of Mac. And it was a desktop. And that was why. I wanted a larger screen. Larger screens were not really a thing for Apple at the time. I think they still had like the old school display, not even like the newest stuff. You know, and always any sort of external display with a Mac has, as you know, Jared,
Starting point is 00:18:13 been generally fraught with issues throughout the years. It's gotten better, but it's not like native. When you have a native screen, the laptop screen or the iMac pro screen or the iMac screen it's good so I'm all for a good laptop honestly it goes everywhere just sucks going from screen to laptop because the stuff moves around the windows move around oh yeah unplugging and unplugging yeah it's my biggest I mean like how has Apple not solved that yet why is it a third party tool that works okay right solving it so yeah i've been i've been pro mobility i have had a desktop in the past but i've always preferred a laptop and that to be
Starting point is 00:18:53 one machine to rule them all like i just get the beefiest laptop i can i err on the side of big versus pure mobility because the difference especially now between the pros and the airs or whatever is minuscule i mean it used to more, more Epic as the pros were just like these huge honking bricks that you really didn't want to put on your lap. Cause they were, they would heat your lap to send your leg hair to a point, but they've gotten so good now that I just don't want to have multiple machines where I have to worry about syncing and installing stuff here, installing it there. And did I do this there or that there? Blah, blah, blah, blah.
Starting point is 00:19:31 And I certainly can't do my work only at my work desk. I just, my lifestyle doesn't afford that. So I'm a laptop guy. Laptops for life pretty much at this point. Okay. Yeah, I've always been just build my machine up from parts, but maybe that'll change or maybe I'll get two machines. I don't know.
Starting point is 00:19:51 Maybe a new workstation and a laptop on the side. Well, you get that YouTube series going, you might get so much hardware be coming out of your ears. You know, funny enough, I have had one opportunity to get hardware, but it was for like one of those, it was like, um, an exercise bike. Oh, but like a really fancy one,
Starting point is 00:20:09 a crazy one with like a big screen and everything. And I'm like a Peloton kind of thing, something like that. But it wasn't, you know, it wasn't that brand. Sure. But it felt weird to accept something that large, like physically and like,
Starting point is 00:20:18 you know, money wise value to be like, how does that relate to, you know, making a YouTube video on like how to write a shell script? I don't know how much of an audience crossover there is. I'll tell you how. I'm sure there's embedded Linux on that thing.
Starting point is 00:20:31 Very possible. Right? Let's hack that thing. How can we check its outgoing IP lookups and stuff like that? Let's look at its DNS lookups. Let's actually hack it to make it not a bike. Then you find out that it's phoning home and it's tracking everything you're doing. That's right. And you can bust them. You can bust them. And you out the people. Let's actually hack it to make it not a bike. Then you find out that it's phoning home and it's tracking everything you're doing and you can bust them.
Starting point is 00:20:47 You can bust them. And you out the people. That's right. You're paid. They sent me this free bike and now I'm debunking them on their privacy problems. That's how you really get the views, Nick. That is. There we go. So just call us anytime you get new hardware opportunities
Starting point is 00:21:03 and we'll give you ideas to do or to not do. All kinds of stuff that we never do either. No, we don't. No, we don't. It would be fun. Peloton, send me a bike. I'll hack it. There you go.
Starting point is 00:21:17 Well, let's dive into our topic for today. This is a follow-up to the last time we had you on, which has been a few years, but we talked modern Unix tools. And that was a lot of fun going through a lot of the common Unix tools like LS and CD and cat and et cetera, et cetera, et cetera. And talking about modern alternatives to those which have, you know, bells and whistles. So that was that episode. People can go back in the feed, episode 451.
Starting point is 00:21:49 We will link it up. Modern Unix tools with Nick Janitakis. Today we're going to talk terminal again. We're focusing on 2Es. I feel like 2Es are having a moment, a, I don't know what to call it, a revolution. A renaissance. There you revolution, a renaissance. There you go. A renaissance.
Starting point is 00:22:07 Probably in light of a lot of the tooling that's now available. We've had shows with people like Charm, the Charm Bracelet folks who are providing Go-based tooling for doing all kinds of text-based and terminal things. And then there's also, is it Will McGugan, I believe,
Starting point is 00:22:26 and the Textualize folks over there providing similar tools for the Python community. And a lot of the stuff that we'll talk about today is built with Textualize. And then there's also something going on in the Rust world with a toolkit called Ratatouille. And the truth is, I have no talent at all. But this rat, he's the one behind these recipes. He's the cook. Spectacular name, by the way. I'm going to grab
Starting point is 00:22:55 that one and throw it in my notes real quick because I'm compiling a list of the best open source puns. And of course, that's a reference to the movie or maybe just the dish or both both but it's a good pun by the way if you're listening and you have a good open source project pun that makes you laugh giggle or at least smirk whenever you hear it or read it send it my way i'm putting together a blog post but ratatouille in the rust world is a Rust crate for cooking up. They're doubling down. That's their words, not mine. Cooking up terminal user interfaces. And of course, its little mascot is a rat-looking chef. So a lot of the tools that we're seeing also are written in Rust.
Starting point is 00:23:39 The reason why I bring that up. So Ratatouille is powering this movement, charm, and textualize perhaps more. Some people are just old school, building up NCurse's stuff, you know, hand rolling their terminal or text-based user interfaces, but lots going on. And so there are so many Tuis now.
Starting point is 00:23:59 In fact, we went out to the awesome Tuis repo, which happens to be maintained by ShipIt host, Justin Garrison. I didn't even realize that when I first loaded it up, but I do know Justin is super into text-based UIs. And if you just look at that repo and scroll it, holy cow, y'all, there's hundreds on there. And those are just the ones that have been submitted. So that's kind of the topic for today. We both have, or we all have brought some to the world, to the show, to discuss, but let's start with maybe two, maybe not, but terminal
Starting point is 00:24:38 tools, tips and tricks that we've been using or are using or know about that we could share with each other and with our listener. Nick, starting with you, I know you are command line junkie. Yeah. So just general tips. General tips or maybe a tool you've been using recently or something you've learned, anything you want. Open book. Yeah, it's kind of funny. When it comes to solving these business problems that sometimes get thrown my way, it always comes back to like grep, set, and cut. Like those three tools combined can solve so many like random things that might come your way.
Starting point is 00:25:11 Like for example, just a quick use case, you know, the business came at me and they're like, by the way, you know, we have this like Salesforce dump of 178 CSV files and it was like 30 gigs of data. So we have a hundred, you know, let's call it 180 files, a lot of data there, you know, all the different columns, all the different rows. And it's like, well, now we need to import that into a MySQL database. And, you know, if you try to do that by hand, you know, what are you going to do? You're going to have to make like 8,000 different columns and like so many different tables, like 180 of them or whatever. But yeah, I just threw together a little bit of shell scripting, like 30 lines of code with like set and grab and cut and all those combined. And we had a solution that got us like 95% of the way
Starting point is 00:25:48 there. Like it just auto generated the crate table syntax and like auto filled out the columns, but like for our car 55 by default, and then someone can go in there by hand to like modify things as needed. And it worked out real nice. So yeah, just random, random stuff like that. Yeah. I mean, that's the beauty of Unix tools is just the composability like little functions do one thing well and then the combining of them.
Starting point is 00:26:10 Like a good chef, Adam will put together different ingredients and come up with an amazing recipe that may be a one-off, maybe it's something they should wrap up and share with the world but what's the movie where Adam Sandler is a chef and he goes home to make himself a
Starting point is 00:26:27 sandwich at one point and yeah what was that it's just like an egg sandwich but because he's a world-renowned chef the way that he makes himself a sandwich for lunch is still just like mouth watering you're like oh man how cool would it be to be that good at cooking that even your throwaway lunch sandwich is just like drool worthy. Maybe Spanglish. Spanglish. It was Spanglish. Yeah. Awesome.
Starting point is 00:26:52 Came back to me. Good movie. A really underrated movie, honestly. Yeah, I like that one. It's a solid, solid movie. A lot of good acting in that movie, in my opinion. I like that one. Nick, that's definitely a good use.
Starting point is 00:27:02 Grep said and cut. I was doing similar things with our front-end feud survey results. So we use typeform to go out and ask people a bunch of questions. And because they are freeform, this is for like Family Feud. Are you familiar with the game, Nick, Family Feud? Survey says yes. Yeah, totally. And so because it's survey says, the whole point of it is the form has to be a text box. It cannot be a multiple choice because that ruins the entire point.
Starting point is 00:27:30 Like what would people say? And they have to be able to type whatever they want. And so we use Typeform just to collect the entries. And then I download a CSV inside Typeform. I'm not going to just read through all these and tally them up by hand. And so for a long time, I had this process where I would open up the CSV in Numbers
Starting point is 00:27:51 and then I would scrub and normalize and try to do some stuff. And then I would export it back out to a different CSV. And then I would use, then I would import that CSV into a SQLite database. And then I would use that CSV into a SQLite database and then I would use the SQLite command line
Starting point is 00:28:08 to go inside there and query it. And then I realized, or I was taught by somebody, might have been Simon Willison, I can't remember who taught me, that SQLite actually has a CSV mode and an in-memory mode and then it also will take queries directly from the command line.
Starting point is 00:28:28 So you don't have to go into the little SQLite UI and do things from there, the prompt. And so I reduced, this is not multiple tools together, but this is just knowing a tool better. I actually reduced that entire process down to a single command line that would just tell that would take the original csv from typeform open it in memory in sqlite as a csv which automatically
Starting point is 00:28:52 creates the tables right there and everything and then execute the specific query and then output it the way i wanted to and i was like oh happy day you know when you have something like that just works like that it's amazing when you you're just cutting down five steps to one. It's like you feel like you're superhuman. Yeah. I love stuff like that. Hey, friends. I'm here with a new friend of mine, Shane Harder, the founder of Chronitor.
Starting point is 00:29:25 Check him out, cronitor.io. It lets you keep tabs on your Cron jobs, Linux, Kubernetes, Apache Airflow, Sidekick, and more. With over 12 open source integrations, you can instrument all your jobs no matter where you're running them. So, Shane, for me, you know I'm a user of Cronitor. To me, it is the missing link, in my opinion, to Cron. What do you think? How do you explain it? You know, every other software that a developer creates, you can watch it work and you can
Starting point is 00:29:53 interact with it. You run it from a command line or you have an API endpoint and you have logs that get produced. And it's really easy to add like an APM monitoring into your API where you can start to get a sense of what your application is doing internally. But when it comes to CronJobs that somehow just was never built until Cronitor. CronJobs you would have to run them at the command line, see that they work, and then just fire them off into the ether and let CronTab run them. And the only way you could know if they're
Starting point is 00:30:24 working or not is by looking at the database to see if the thing did its job. Or if it's like, maybe if it's supposed to upload files, maybe you would just go check that the files are uploaded. But that sort of verification doesn't scale. It's hard to write tests, like end-to-end tests that do that in production.
Starting point is 00:30:40 Even if you can, then they're bound to break eventually as the cron job breaks. You know, if you're testing a specific bucket for a file, if you're checking that file gets uploaded, you know, soon enough, that bucket's gonna change or the file's gonna change, and then your test's gonna break. Rather than just looking for the side effects
Starting point is 00:30:54 to know that it's working, Cronitor is actually watching every cron job execution and reporting back to the cloud service when your job runs, starts, or fails, along with like telemetry, including like the full log output. So when it does fail, you've got like the metrics and the logs that you need to dig in and understand why and debug it and fix it. So I'm using Linux and Linux cron jobs are by far the most popular in my opinion, right? But there's so many other
Starting point is 00:31:20 cron like things, Kubernetes, Airflow, Sidekickkick help me understand the full spectrum of background jobs and cron jobs beyond linux cron yeah linux cron jobs are massively popular they are still 40 years later the tool that most developers will go to first when they need to start scheduling something in the background but when you get into a team environment or an enterprise environment, there is a lot of other constraints at play and there's other considerations. And whether it's simply like redundancy that you're not going to get from crontab itself or, you know, more like complex orchestration stories like you can get with like Airflow, we see companies eventually outgrowing cron. And what we wanted to be sure of is that, first of all,
Starting point is 00:32:05 like migrating from Cron to anything else is a complicated thing. So we wanted to give you tools to help you monitor that transition and make sure your jobs are working good as you do that migration. And then second, we wanted to give you a way to unify all these different job platforms, because seldom do you have just like platform A and you migrate cleanly to platform B. Probably in a real world scenario, you're running both side by side for a while. You don't want to have different monitoring tools or different monitoring strategies for different, for every different platform that you, that you deploy. So our goal is anywhere you're running a background job, you can use Chronitor. The number one way that we ensured that was possible is by having like a really simple API that you can use Chronitor. The number one way that we ensured that was possible is by having a really
Starting point is 00:32:45 simple API that you can just use with an HTTP request yourself, which is pretty abnormal for monitoring tools, but that works in a lot of cases. But to make it easier then, every popular job platform out there, like Linux Cronjobs, Kubernetes Cronjobs, Windows, Sidekick, Airflow,
Starting point is 00:33:02 you name it, we have a Chronitor SDK that you can install that will run automatically, configure your monitoring, run in the background, and sync all your jobs with Chronitor the same way your Linux Chron jobs will be synced. Okay, friends, join more than 50,000 developers using Chronitor. I'm one of them. You can start for free, and they have a pay-as-you-grow pricing plan.
Starting point is 00:33:23 Setup is too easy with more than 20 SDKs. Check them out at chronitor.io. That's C-R-O-N-I-T-O-R dot I-O. Again, chronitor.io. As far as tools we're using, I'm still rocking A2N. Adam, are you still using it, A2N? Mm-mm. No?
Starting point is 00:33:48 I don't have a need for it, I guess. Yeah. I use Warp as my terminal, and it remembers a lot for me. Oh, yeah, you're using Warp on the terminal. Mm-hmm. Nick, do you know about A2N? Nope. Is it an actual, like a terminal, or something else?
Starting point is 00:34:00 A2N is a history tool. So it replaces Control-R and the up arrow with a better interface, fuzzy search, a bunch of stuff that is basically like your terminal's history on steroids, so to speak. And we did a show with A2N's creator, Ellie Huxtable. Yeah, we did a show with Ellie Huxtable. And it's one of these tools
Starting point is 00:34:27 where it kind of disappears into the background. It's not like front and center because I'm never actually typing the A2N command. It's just in there in my history and you invoke it via things that you're already invoking. You know, if you're control R into search or just arrowing up or down
Starting point is 00:34:44 to find recent commands. And I've installed that. I think that was like a year or so ago. And I'm still rocking that. Definitely am not going to uninstall. It's just small quality of life improvements over the default bash history or ZSH history. Oh yeah, it's interesting.
Starting point is 00:35:01 I forgot the name of that tool, but I'm pretty sure I vaguely remember it now from like a Hacker News post from some time ago. Yeah, it's pretty well beloved. It's one. I forgot the name of that tool, but I'm pretty sure I vaguely remember it now from like a hacker news post from some time ago. Yeah, it's pretty well beloved. It's one of those things that just kind of makes your life better and doesn't ask anything of you. And so it's like, why not? For sure. Let me ask you this. So I like using control R all the time and I happen to use FCF to do, you know, searching through my history like that, which could be classified as a T-U-Y to degree, because it is opening up like a little interface that you can interact with. How does this tool compare to FCF? Like, have you tried both side by side or in general? Not side by side, but I did use FCF for a little while. And you're going to find very similar fuzzy
Starting point is 00:35:39 finding with A2N. It's a little bit better looking in terms of like, she's taken more time to make sure that the UI is nicer than I think FZF is. I know you can tweak that and customize it. But it's really kind of a no step, similar functionality. So with FZF, this is like a thing that you go into somewhere and make sure that in your bash RC or whatever, and make sure that when you control r fcf gets invoked and there's like some steps that get us to set up right yeah and then on top of that i mean if you're talking about history stuff there's you know many different bash or z shell settings that you need to configure just to get your history set up so that you can save 50 000
Starting point is 00:36:17 lines worth and you know other things like this yeah exactly which i had done all that stuff because i didn't know about a2N until a year ago. And so if you already have all that stuff set up with FCF, you're going to have a very similar fuzzy searching of your history with A2N as you would with FCF. A2N does bring a few other things to the table, like stats and I don't know, when you up arrow, are you having fuzzy search inside of the history there?
Starting point is 00:36:45 Or like is FCF invoked at all in your up and down arrowing through your history? Or is that just the standard Linux one? No, if I'm just hitting the up arrow in my shell, it doesn't invoke FCF. I mean, there might be some custom key binds to do something with that, but I haven't set that up. Yeah, so that's one thing about A2N is even when you up arrow, I'm sure you might turn this off, but it will invoke the A2N UI,
Starting point is 00:37:10 which you can just continue to up arrow like you normally would, except for you also then have that same fuzzy search functionality as you would with control R. And so sometimes you're not thinking about control R and you're just like up arrowing and you realize, you know, it was like, oh, not that version of this command.
Starting point is 00:37:24 It was a different one. Then you can start to like narrow it down. So it's just slightly more tuned into that. But other than that, I think that the experience would be relatively similar. Right. Yeah, I just tested this now. So if you just go to your terminal with FCF and just hit control R,
Starting point is 00:37:37 that will bring up your search history there. And then you can kind of up and down through FCF's window, but you still need to invoke it with like a, you know, control R. So for folks who already have that configured, probably not a big win, but for people who are new to the terminal
Starting point is 00:37:50 or didn't know about FCF and how to set up the right environment variables to get their bash or ZSH history to be 50,000 lines or whatever, like installing A2N, I think, is an easy like one step that does all those things for you. So let me follow up with one more question about that.
Starting point is 00:38:07 Sure. So one interesting thing when you're dealing with your shell's history is if you happen to be using a tool like Tmux, and you have multiple sessions and panes and Windows running, how does this tool let you have a unified shell history between all of them without things getting out of date or commands not being in the right order when you want them? Yes. So that's one of the core things about A2N is its unified shell history, not just across your TMUX sessions,
Starting point is 00:38:31 but actually, and here I am with one computer, so I don't really get to live this life, but across all your machines as well. So that's one of the core things that Ellie is doing that I don't really care about as much because I just have one computer, is you could have your shell history across and synced across all of your machines
Starting point is 00:38:47 via into an encrypted sync service that she provides. But I don't really know how I want that to work sometimes, honestly. And there's moments where I'm like, oh, I type this command into another TMUX session and I would love to just up arrow and type it here and it's not there and then there's times where it is there but i don't want it to be there i'm like actually that was contextual to
Starting point is 00:39:11 another thing i don't want it in this little shell history i mean i am of two minds about how i would actually want the feature to work i think it's not straightforward have you had that experience very much and it's very much like not straightforward because it almost feels like the only way to solve this and like the best way possible is like, just do like what I want. That's it. That's what I wanted to do as well. But I don't know that the computer knows
Starting point is 00:39:35 like a mind reader, what you want is the problem, you know? Does it say things like as if you LST and then with some flags, a particular directory, is it keeping the base command plus flags plus directory in its history too so that when you re-invoke it, it's like, well, I want the LS command with these flags, but not with the argument.
Starting point is 00:39:59 It's going to be the entire command. Yeah, that's kind of painful. So you might have to like up arrow select it and then you can hit tab or whatever and then you can like delete back and stuff like that you can probably do a quick shell expansion thing with the exclamation mark and that kind of stuff which is obviously more kung fu and things that i can't remember how they work all the time but yeah it it's not smart enough to know like i, I just want the flags. I liked that version of LS, but now I'm doing it in a different context.
Starting point is 00:40:29 I want to change the path or use no path. I think you have to just do that stuff manually. Yeah. This is where I like Warp. I don't know if it has this feature because I do use a few machines, but so sparingly that I forget what I've done the last time I used it. And so Warp, at least on a single machine, I think you would appreciate this, Jared, and I know you already use A2N, is that it does that. So like I'm just tinkering on this spare Linux VM I have on Proxmox because, hey, I'm on
Starting point is 00:41:03 a podcast, I'm about two weeks. So I'm like, I'm going to install some, right? And I want to do it in a way where I can just blow it away, and there you go. And so I'm logged in, and I'm just like, well, what are some recent commands just to see if they're there? Because I know they're there. I know how Warp works, but just to see if they've actually followed me even into this different machine. And, of course course they're there so like i have that same feature because of the terminal application i've chosen versus this sub thing and i think the one thing that i think warp is driving towards and this is by zero and add they're not even sponsoring us i just like them
Starting point is 00:41:36 and zach's cool and i like his team and i believe it is a version of the terminal of the future there you go i think that they're doing things like team features, which I think would be cool because you can log in to warp and let those things transfer via their cloud service. If they do that, I think that's where they're driving towards. I wish they would do that more so with settings because going between machines, it doesn't have that. Whereas another tool I use daily is Raycast and it has that where it cloud syncs settings it doesn't cloud sync clipboard history and sensitive things it's doing things that like themes and stuff you really want to have unified between machines that's kind of how i look at these tools like even though we're talking about tuis i still feel like raycast and warp are kind
Starting point is 00:42:21 of similar in that respect because they they're a layer above the need for a TUI because the application itself has the things in it it needs to give you that history. There's other stuff too. I'm not even using expansions and snippets, things I'm not even like, I don't know. I don't even know how to use them, honestly. I think some of the tooling...
Starting point is 00:42:41 Does it support Tmux? Well, I really wish maybe... I haven't dug into their documentation to criticize it, but even Raycast, they're doing a great job with teaching you how to use the tool. Because there's always these hidden features. I think H1 probably could do this as well. Or basically any tool that has hidden features
Starting point is 00:42:58 that are not easily discoverable. Because the Jareds of the world will just be happy with the defaults that you're given and all the expressiveness that you can achieve if you would just tweak a few things. And maybe Nick is the kind of person who's like, let me tweak this. Nick knows all the different tweaks.
Starting point is 00:43:14 On the super old hardware, by the way, but let me tweak this. Yeah, exactly. Now, Nick definitely knows all the command line flags, don't you, Nick? Some of them. Yeah. I mean, he's written them down at least. They're on his blog. They're on his YouTube.
Starting point is 00:43:27 He may forget them, but he can always, they're a Google search away as long as Google search continues to index our content. But that's a different topic. Yeah, I mean, Warp is cool. I love people trying to reinvent stuff, you know, make it better. As soon as they get Tmux support, then maybe I can give it a try. But until then, and it sounds like Nick, you're probably with me,
Starting point is 00:43:48 I'm just not going to use it because I live inside of Tmux pretty much everything I do. And so that's the rub with trying to replace a lower level foundational part of the stack. Whereas A2N is like a history thing, like it's a smaller subsection of your terminal, is that you have to support all these different things.
Starting point is 00:44:08 And there's a long history of weirdness inside of terminals that is just difficult. And so until then, or they convinced me they've replaced Tmux with their own functionality that is better than Tmux and provides me all the same things that Tmux does. I think they could probably get that done. I'm a relatively vanilla user of Tmux. I'm not an advanced Tmuxer. But that's an education
Starting point is 00:44:32 problem, right? They have to be able to teach people that they've done that. Yeah, I agree. I've used Tmux several times, but I've never been like, oh, this is the way. I've never sat beside somebody either or pair programmed or pair terminaled, which is probably different than programming. It's like, just like, let me just see how you hack. To really be like, oh, well, I'm really missing something with TeamLux. Like I've used it.
Starting point is 00:44:57 It's kind of kludgy in some cases, but maybe that's because I haven't gotten past that even like the Vim stage. Like I'm a fairly daily user of Vim, but very basic user of Vim still. Like I even like getting to the end of lines or jumping lines or copying multiple lines or even yanking and pasting. Like those are the, I'm doing basics, you know. I can at least get out of it. So thank you very much. But, you know, with Tmux, I've never gotten past the whole training wheels, let me actually find usefulness, because I guess I just haven't.
Starting point is 00:45:26 Sure. Well, Nick, you're a Tmux user, right? Yeah. Give that on the pitch. What's the pitch? Okay. So if you like to use the terminal, let's say you're using Vim or whatever editor
Starting point is 00:45:36 and running a whole bunch of different command line tools, maybe Tuis as well, and you don't want to leave your terminal to juggle multiple projects, I mean, you can use something like Tmux sessions to have, let's say, you know, maybe if you're working on the change lag source code or maybe you have your own personal blog or maybe you have a different project, the Kasad project that you're building, you know, you can have a Tmux session for all three of those things
Starting point is 00:45:56 and then use Tmux to jump between each of those. And all three of those sessions, they might have their own window layouts that are, you know, specific to that application. Like with the change lag source code, you know, maybe you have your code editor in one window, maybe you have like Docker compose up or however you run your application in another window. And then, you know, when you jump to your own personal blog, it has its own set of windows. So you can kind of switch between contexts very quickly and have everything just ready to go
Starting point is 00:46:20 right there for you without having to be like, oh, I got to open up my code editor and split this window, open up a second terminal, and then, you know, do all these things. Uh, that's typically how I use Tmux, um, in my day-to-day just to help me juggle a lot of different things, you know, cause I have probably like 11 or 12 different Tmux sessions, basically 11 or 12 different projects. And yeah, they're all laid out a little bit different. I mean, Tmux makes it super easy to like, if I just want to open up a second window or split a plane vertically or horizontally, you know, I can do that type of stuff and jump between those hotkeys. Like if I want to go to window one or two or three, you know, that's just a hotkey away. Yeah. I've been there to do some
Starting point is 00:46:52 of those things. I definitely am not a daily driver in the terminal where I'm like effective and efficient on the daily. My work is generally outside of that. My tinkering is more in it. So I haven't found the need to be like let me obsess over the tooling so much. What's wrong with multiple tabs? Well, you have to set them back up again. I have to go. See you later, guys. I had to ask the question because somebody out there is like
Starting point is 00:47:17 what's wrong with multiple tabs? You mean like just your terminal has multiple tabs open? Yeah, it's like a new tab. Yeah, exactly. Well, then you have to set that back up again later. So that's the reason. It's like a new tab. Yeah, a new tab, new. Yeah, exactly. Well, then you have to set that back up again later. So that's the reason. It's like the setup, the teardown.
Starting point is 00:47:32 So let me give you an example that maybe would be enticing for you. Because you SSH into local boxes. Multiple machines. Yeah, exactly. So this is less of a problem as it used to be. But SSH sessions, which have not the best internet. Like obviously on your LAN, you're gonna have good connections all the time. But anytime you're like SSH into a remote server where you may hang, you may have an internet outage, you may lose that session. This starts
Starting point is 00:47:54 with a good new screen, it goes way back, but Tmux has its functionality as well. What you can do is you can SSH in, you can start Tmux inside that remote machine, you can have multiple panes, multiple things, all the stuff you could have like with tabs on your own computer, but then you can also detach from that session and it stays running. And so you can set it up. So like if you accidentally close your laptop and you're like, dang, I had three tabs open SSH into this machine. Right. Moving files around, doing different stuff. Yeah. Now you basically just lost the connection to all that setup, which is still live on that remote server.
Starting point is 00:48:27 So the next time you SSH in, you just tell Tmux to connect to that session you had going and everything magically back. And so that's a big win. Yeah, and just expanding on like the magically back thing. So one interesting thing with Tmux is, you can have multiple sessions and windows and panes and all of that.
Starting point is 00:48:43 But by default, if you were to reboot your box and come back, like all of your Tmux state is going to be gone. You know, you have to like start from scratch there. But there's this really nice Tmux plugin called Tmux Resurrect. And I've been using this one for quite some time now. And now let's say you've got your Tmux set up however you want. You've got your 10 different sessions, all these windows laid out. And now you can just hit a hotkey, basically your Tmux leader key, control R or control S to save it actually. And it's going to save all of your sessions, windows and layouts to a text file. You don't need to think about it. You don't need to worry about it. And then
Starting point is 00:49:12 when you reboot, all you have to do is just launch team ox and then restore from your resurrected file, another hockey for that one. And everything is back to just how you left it to some degree. I say some degree because it's not going to like reopen every single application and put you exactly where you were, but at least all of your sessions in Windows and certain applications like Vim can be auto-started as well. So it's a nice one. But yeah, I've been using that one for a couple of years. Three years ago, you mentioned the save and restore Tmux sessions across reboots with Tmux Resurrect. This is on your YouTube. I'm just thinking like, gosh, where could I dive deep into Tmux? Where is the good primer? I mentioned I'm becoming a chef. I've found some really
Starting point is 00:49:49 awesome resources behind the scenes. I always have some sort of crazy hobby and I'm actually getting really good at cooking. So good that I'm like now the cooker in our household, because it's like such good food and our kids love it. And I've been enjoying the process, but like, I've found some really cool stuff to teach me the first principles of cooking not just how to make a meal but like how do you sharpen your knives what are the best ways to dice what are the ways you should do different cheeses how to you know do garlic and pull it off the clove and like make it a garlic clove that you can actually begin to slice dice dice, mash, whatever. I'd like to have the same kind of idea for Tmux.
Starting point is 00:50:30 Like help me, Nick, if you haven't already done this, maybe you have or point me to the YouTube videos and we'll put them in our show notes, but help me with a primer of like watching somebody because that's what I think I lack personally is I don't have a good buddy next to me. And ChatGPT does not have this function yet where it's like, hey, let me shadow you as a seasoned engineer that loves tmux like if that when that becomes a thing that'd be kind of cool until then we've got the nicks out there that have been slaying it on youtube for years on this old hardware just just killing it nick surely you have a video about the fundamentals of tmux or
Starting point is 00:51:04 something like that right i don't have it like the exact fundamentals, like sharpening your life level, but I do have like a use case based one to be like, this is how I use Tmux in my day to day. And it kind of demonstrates using, you know, the panes and the windows and sessions and Tmux resurrect. And it's like, you know, like an eight minute video or something was from maybe five years ago. But it's interesting because I would be curious to see if Adam can Google for that topic. And if my site or page doesn't come up, then there's a problem.
Starting point is 00:51:29 What should I search? Tell me the search. I'll put it in right now. Well, that would be cheating. I want you to try. Well, just give me a couple of key,
Starting point is 00:51:36 like, uh, getting started with T mucks. Boom. Let's see what's there. Wow. Red hat is first. GitHub. T mucks. T mucksux is there the wiki linux eyes ham vaki linux training academy a hacker news post pragmatic pineapple hostinger
Starting point is 00:51:58 wow hostinger's got some content out there on tmux it's ranking sorry nick you're losing uh let's see i'm losing back. Shane Lee on YouTube. Now, I didn't search YouTube, though. Let me take the same search and apply it to YouTube. Well, the funny thing is I don't even actually know the titles of those posts because they're from some so long ago. That's okay because
Starting point is 00:52:17 this is probably a great example. So, Network Chuck, obviously, is first because he's just he kills it on all content this is something you know right now it's always right now in all caps with exclamation points i'm like please that's an old title let it go let's see if nick is in the scroll learn linux tv is in the is in the scroll dreams of code is in the scroll you're just getting different kind of slayed here. He was slaying it earlier and now he's getting slayed. Primogen is there.
Starting point is 00:52:47 Theo is there. Warp.dev is there. Shane Lee is there again. Where is Nick? Nick, oh, where are you on your old hardware? Gosh. I do not see Nick
Starting point is 00:52:59 in the initial page scroll. Okay. I think I discovered why. Because I'm looking at this post now and the title is so, this is a great aside and just how important naming your titles are because my title is using Tmux sessions, windows, panes, and Vim buffers together. Oh yeah. That's pretty specific on, but the, but the, but the atoms of the world aren't searching to be like, Oh, how do I use a window in a pane? It's like, you don't even know what those terms might be. If
Starting point is 00:53:23 you're just getting started, right. Teach me Tmux. Getting started with Tmux. Tmux for beginners. Right. Why should I use Tmux? All those Tmux phrases. Yeah, I agree. You have to think.
Starting point is 00:53:35 This is part of user experience, though. This is part of product development. This is the problem of all products. The problem of all, I guess, startups really is like, how do you capture the attention? Well, you have to think like the user. You have to talk to some people. You have to go on some podcasts.
Starting point is 00:53:49 You're doing that great. No problem. Good job. But you have to title and think like, and Jared and I, maybe we don't do this very well, right? Do we do this very well? No. We're not a great example of titling well.
Starting point is 00:53:59 We enjoy our titles. This is for the love of titling. Yeah, we don't title for that purpose, which is why no one finds us. No one finds us for other reasons, Nick, but we're okay with that, I guess. I found another post from 2017, which is, this is more of a getting started guide. It walks you through the basics
Starting point is 00:54:16 and everything. There's no video for that one, but this one is, who else wants to boost their terminal productivity with Tmux? Which is maybe closer, but still way off the radar of what a human being would search for. Right. Boost your terminal productivity with Tmux, which is maybe closer, but still way off the radar of what a human being would search for. Right. Boost your terminal productivity. I bet you, if you took an exercise and went back and retitled some of your videos, I'm not even sure how you can like optimize your YouTube, but my assumption is if you can go back and revisit,
Starting point is 00:54:42 either go back and update or revisit some of these topics and create brand new content that is better titled and more focused. Shorter form, more focused, compartmentalized. Time to content is super crucial. No meandering. Get to the point and then make it a series. I bet you. No meandering. We're an hour in.
Starting point is 00:55:04 We haven't talked twoies yet. Yeah. Well, let's talk about a twoie. Oh, love it. I got one open right now. All right. Let's hear it. So, Nick, on your list, you had H-Top, which I'm a fan of H-Top.
Starting point is 00:55:16 And, Jerry, I think we had the prior core committer of H-Top on the show way back in the day when it got, yeah. I have here in front of me Bash-op bashtop bashtop and i think it's kind of cool because the installation process is pretty easy one thing it asks you to do is to do the apt sorry i'm on ubuntu so my at least my process is this and your mileage may vary wherever you're at. But it's on Ubuntu, you add the apt repository via this thing I believe is called PPA. That stands for, Nick help me out here, personal package archive. And essentially you're adding bashtop-monitor slash bashtop as an apt repository. So you can apt update and just do sudo apt install bashtop. And then it installs things like libcensors, Python 3,
Starting point is 00:56:14 utilities if you don't have them in there, sysdat and a couple others. And then once you get it there, you just simply type bash, B-A-S-H-T-O-P, and and boom you've got this beautiful thing what I like most about it is that it's got super awesome configuration theming you can do a bunch of different changes to it and one thing I don't like personally why I prefer this over htop now is one it's slightly more beautiful and then two I just hate how challenging it is to configure HTOP. The configuration file is not meant to be edited by the human.
Starting point is 00:56:48 It's only via the interface. And I find the interface kind of kludgy to fine-tune where things are at. Whereas, Bashtop seems to be a bit more, just, I guess, human-friendly on configuration management with it. Okay, I'll have to check it out. Yeah, it's interesting because with HTOP, you know, it's a tool I've also been using for a really long time, but usually I'm reaching for it very occasionally. You know, it's like on my really, really nice work machine. Now, if I want to see if my CPU cores are tagged, all four of them, by the way, you
Starting point is 00:57:18 know, I can run an HTOP and just see those little bars to be like, oh, well, three CPUs are maxed out. The fourth one's still doing good. Or, you know, maybe I just want to see what is using the most memory out of a list of processes. So it's interesting that you mentioned configurability. In my mind, I would want to configure nice themes with
Starting point is 00:57:33 Tmox and everything, but in HTOP, it didn't even ever cross my mind once to jump into its config to tweak it out. Just because it's like, usually I'm going in a very specific thing and then exiting out 20 seconds later. Plex box for how well it's using the RAM or the CPU during like maybe a 4K movie transcode, for example. Or on the TrueNAS box, I want to pay attention because we compress our archives and put them into a file package called 7Z. And I max it out. I push the compression algorithm to
Starting point is 00:58:19 the max. And so whenever I archive these things, it pegs my M1 Max CPU 100% and takes the temperature to almost 200 degrees Fahrenheit for five minutes. And then it's done. It's kind of fun to watch that. It's just kind of fun. Like you're really pushing this beefy machine. And damn it, I want to see what's going on here. You know, I want to H-OP up in there or my new case BashTop. And so the one thing I do specifically on these kind of boxes is I want to have my CPU
Starting point is 00:58:51 stacked. I want to have them organized. I want to have my host name there. I want to have my uptime. I want to have my average CPU, my memory, my swap. I want these things there. I want network there. I want disk IO there. And if this system happens to have ZFS, HTOP thankfully has this other cool line item you can put in there for ZFS arc management and just kind of knowing how your ZFS file system is working. So I appreciate that about that. But for every time I've got to instantiate a new machine with new HTOP, it's not like one config that I could just move over from a git repository or a copy paste it is literally a file you should not edit i think they even tell you that and from
Starting point is 00:59:31 system to system i tried to see if like it made sense there's no rhyme or reason to this config file so every time i do it i have to do this brand new setup which is not too frequent but it's enough that i'm like forget it i don't want to this anymore, but I do keep doing it because it has been the best. But now I'm looking at Bashtop. It has not won for me yet. It's still runner up and it's still winning or at least trying to win. So I haven't fully adopted Bashtop, but I'm thinking that it might be a long-term better solution. That makes sense. And it's a great aside too, just around like being really engulfed in your environment, right? You mentioned you're running Ubuntu there. So I would imagine you'd be using Bashtop as like your full blown, like system monitoring tool, like an activity monitor or
Starting point is 01:00:12 whatever. Whereas at me with Htop, you know, I am still running Windows with WSL, but like, I would just probably just open Windows as, you know, like task manager to see that information. Whereas for you, like you're using that one tool. So you want that one tool to be like, yeah, I want to see network and CPU and all that. Have it laid out the way I want. So I don't need to tweak it. That makes total sense. Not to go one layer deeper, but there might be somebody out there saying, but what about Btop? I agree. Btop is awesome, except for Bashtop has more letters and it's slightly more awesome. There you go. Well, I was just reading about
Starting point is 01:00:45 Btop++. Oh, nice. Have you heard of this? No. Did they? Nope. They like to increment like us. Yeah, I mean, I assume it's better
Starting point is 01:00:53 because that's what the plus plus means. It is better. It is. It's been better for years. It's by the same author, Bashtop in C++. So Bashtop is written in pretty much Bash. I don't know if that surprises you,
Starting point is 01:01:05 but it's 94% shell scripts, which I assume is Bash. It must be tough to maintain. Yeah, and now there's a Btop++ is a C++ version of Bashtop. Now, switching from something to C++ doesn't automatically make it better. I mean, I've heard that maybe C, in certain ways, is even better than C++. But one thing I'll
Starting point is 01:01:26 notice about the GitHub is that Bashtop's last commit was two years ago. Whereas Btop++ was committed to three weeks ago. So it seems like the author of Bashtop has switched their focus over to Btop++.
Starting point is 01:01:43 So maybe give that one a look. So I saw a release. I thought I saw a release on Bashtop that made me think, okay, this is kind of cool. And now I'm not seeing it. There are no releases for it. Dang it.
Starting point is 01:01:54 It's all right. This is dated software? I'm pimping dated software? What's wrong with me? Hey, some old software is just good. Okay, fine. You're right. I mean, how old is Tmux?
Starting point is 01:02:02 So this is a case where it's just good. Okay, fine. You're right. I mean, how old is T-Mux? But if the, so this is a case where it would be to find these tools out there on GitHub. Sure, there's a username there. I could probably pay attention to the user who's actually making
Starting point is 01:02:15 this software and see if they... The human. The actual human that's writing your software for you and giving it to you as a gift. That's right. I should, you know,
Starting point is 01:02:22 this free USB stick at the front of their lawn, I just run by and steal it. Right. Yet it's free. Well, I think there's a dot connector that you've done that I did not do yet between the two, which is if it's the same original maintainer slash author of the software, have they moved on? Which it seems like they've moved on. Oh, man.
Starting point is 01:02:40 That's all right. So I should be using btop++. I don't know if it's actually better. I mean, it's not Changelog++, which we know is better. But it might be. And I know that the author is still working on it. So maybe, you know, the big rewrite, sometimes it takes a while to come up to feature parity. It may actually be worse for a while,
Starting point is 01:02:55 but have a better foundation. I am not a user of this tool, so I have no idea about the history. But let's get him on the pod. Let's talk about it. So it seems like slash Btop is not just Btop++. Did they just change it then? This I don't know.
Starting point is 01:03:09 Okay, so it's the same. I've been doing my research while you've been talking, so I'm very shallow at this point. You actually reached the end of my knowledge. The person's name is Jacob. Don't know how to say your last name. We're going to reach out. There you go. It is interesting how fast developers will just like throw away a project they love
Starting point is 01:03:27 just because it hasn't been touched in like 11 seconds. Right. Adam's like, you know what? Btop sucks or Bashtop sucks. Well, maybe Btop has the same principles. Well, it's literally the same person. So I assume it's like the successor to the tool you already love.
Starting point is 01:03:43 And so check it out. Nobody wants to buy last year's product at the New Year, you know, this product for this year. Nick does. I mean, his PC is 10 years old, man. That's true. Gosh. All right, Nick, school us on going old.
Starting point is 01:03:55 Staying old. Legacy. There we go. It's actually funny. You know, we're now like however long it's been on the whole entire show, but have we even defined like what makes something a TUI versus just a regular command line tool? Great job, Nick. You should be a podcaster.
Starting point is 01:04:10 Tell us. Maybe one day. Do you have a, do you have a definition? Do you have an idea? Do you want to hypothesize? Well, okay. Let's go zero research top of my head. I mean, I would say a tool like grep, sed, cut, et cetera. You know, this is a command line tool typically that you'd run. You provide it some inputs, it will provide some outputs. And you know, the output that you get on your screen, it's almost like a transaction, almost like an HTTP request. Like your request is calling the command. The response you get back is what you get back in the output there. And it could be like an image, you know, if you're dealing with like an image manipulation tool, it doesn't need to be text. But like a TOI, to me at least, it's like something that's like
Starting point is 01:04:44 just running, you know, it's like, like HTAP, like it's just running and you can interact with it. You're still sending an input, you're still getting outputs, but you're kind of getting these little, you know, incremental updates on, on the screen somewhere, like in your case, like a CPU graph or something like that. So yeah, I don't know, in a weird way, if you're going to follow that HTTP like analogy or something, it's almost like a web socket connection where like that connection is like staying open and then it's like broadcasting things back and forth where, you know, one way works as well. But I don't know,
Starting point is 01:05:08 do you guys have like a different definition of that? I think mine is slightly more simple. I would say, I think a 2E is more application-like. Whereas you open it and you have a brand new, probably bespoke interface that's specific to its function. Whereas those tools are utilities where you're sort of passing things around on the command line.
Starting point is 01:05:28 They're not meant to be TUIs. What does TUI stand for, Jared, again? Text-based user interface. There you go. I thought so. Not terminal user interface, text-based user interface. So I think they literally are a UI to a particular application. So I think they probably get started like a bash top or a B top or an H top.
Starting point is 01:05:49 You just invoke the command and it runs this application that has a particular UI that matches whatever its function is, whether it's a markdown reader for read me's or an editor. Vim is kind of like a two. You're right. It's kind of like a application right it's kind of a tui well if you run it in the terminal
Starting point is 01:06:09 where else would you run it there's vim guis in fact Chris Brando got in trouble because one of his recent unpopular opinions was you should learn a text based editor like vim or emacs and of course the nerds came out of the woodwork and said,
Starting point is 01:06:26 Emacs is not necessarily a text-based editor. Sure, you can use it inside a terminal, but Emacs is so much more than just a text-based editor. Of course, there are GUIs for Vim. But yes, Vim in your terminal would be a two-ee, wouldn't it, Nick? Yeah, I would agree with that. So yeah, I think Nick's on point.
Starting point is 01:06:45 I think Adam's on point. I think the point is statelessness versus statefulness. Nick's was more scientific, though. He was like a scholar laying out there what two-e's are. I was like a layman. Just off the top of his head. He's just scholarly. Yeah.
Starting point is 01:06:57 Well, he's being very technical and pedantic, as we would expect us to be. And I think he's right. I think the statefulness is the point. A command, or utility as you call it, Adam, from the command line is a single transaction, like Nick said. You run the command, it does some stuff, it outputs some stuff.
Starting point is 01:07:18 Maybe it outputs nothing, as it should, if everything goes correctly and has no output. Whereas a TUI has state. You launch it, it goes through time, things change on it as it runs, and then you exit it. And so I think that's pretty much the difference. I would probably say they're themable as well. I mean, there's an interface that you care about.
Starting point is 01:07:40 Themable, I think, is a feature that you would want in a TUI, but not necessarily. A desirable feature, I would say, for me at least. I want to theme everything Dracula. If it's not Dracula, just throw it in the trash. Let me introduce you to a new text-based user interface
Starting point is 01:07:55 for HTTP requests. This actually kind of inspired this episode because I just thought this was so cool. I want to talk about it more. I put it in news on Monday. It's called Posting, a powerful HTTP client that lives in your terminal. And it's basically like take Postman or take Insomnia, put it in the terminal. It's built with Textualize.
Starting point is 01:08:19 So it's a Python tool. You can pipx install it like I did. And it's very much like Postman insofar as you have collections and you can create whole different sessions of requests. So it's not your typical just run curl, get an output. This thing is a long-standing application. The reason why I want to introduce it to you, Adam, is because this sucker is themable.
Starting point is 01:08:43 In fact, if you launch it, it's beautiful to start. But you can also hit control P for commands and it has the command palette which is so common in text editors and other tools today. And you can just go through the themes and change the way it looks and there is a theme called hacker with the hacker green on
Starting point is 01:09:07 black guys. This thing is awesome. It's chasing my heart here. I got to say, I'm just glancing the readme file on good hub now. And there's a quite a few screenshots with different themes. Yeah. This looks pretty slick. It's very high quality. In my opinion, you have, you have different built-in panes for different sections, like the request, the response, a collection, different things. If you are familiar with Postman, at least the earlier versions of Postman, I haven't used Postman for years, but that whole UI is very much akin to that, but here in your terminal. And what's cool about it is you can do all the keyboard shortcuts, but you can also use your mouse and click through
Starting point is 01:09:46 on different tabs and so it's like aware of the mouse but also keyboard driven it's i wonder and this would be a question for probably for will mcgougan and for the author of this whose name is darren burns like how much of this functionality that they've accomplished in this particular tool he's getting for free from Textualize and how much of it Darren has actually done. Because I would consider this a very rich text-based UI as opposed to a lot of them where like it's just keyboard commands or it doesn't really have all of the things figured out. The tab situation is correct. Like you can tab through the different areas as you would on a web form. And it just works in the way you'd expect it to.
Starting point is 01:10:31 And so it's very easy to manipulate. So I'm just highly impressed by this one in particular. Very nice. Yeah, I may have to check this one out. It's actually interesting though, like this could be maybe a hot take on TUIs in general. So I really don't use too many of them. Like sure if I'm going to classify Vim as a TUI and FCF once in a while, but like I know there's
Starting point is 01:10:51 two UIs, maybe we'll get to this a little bit, for Git and there's like one for Kubernetes as well, like K9S. Like I just, my use cases just don't really go after using tools like that because usually it's just like, I just want to run it off one, one off command, get some output, move on. Do you use GUIs? Yes, for certain things, definitely. Like if I'm editing a spreadsheet or something, I prefer that in a GUI. Would you consider a TUI for that?
Starting point is 01:11:16 If you can find me a good spreadsheet for your TUI, and I shall. Hold on, let me go back to the awesome TUIs repo and see if I can just search for the word spreadsheet or excel scim and incurses spreadsheet program for the terminal we're gonna get you to try that one out i'll give it a shot or busy data actually busy data is awesome have you tried busy data that is more of a visualization tool so it's not going to be like a one-for-one replacement for google docs or excel or numbers but yeah i would say that spreadsheet one's an interesting use case, because some of that, at least the way I use them is like, you know, let's say I'm exporting
Starting point is 01:11:52 a Stripe CSV dump for like, you know, whatever courses I sold over the month, and I want to calculate something, I may just like use my mouse to drag, I don't know, like three weeks worth of rows or in there and kind of just sum up a total based on what I have selected. And I kind of feel like in the TUI, that's going to be hard to pull off. Like it would be probably pretty easy to sum a whole column. But what about just like rows 6, 15 and, you know, 30 through 50? That's why this particular tool is impressing me. maybe visit more textualized based and maybe even some more charm based TUIs because the manipulability of this is higher than I would expect out of a traditional terminal tool.
Starting point is 01:12:32 The fact that I could probably, I could imagine something built with this and maybe it doesn't do this, but I could imagine you'd be able to click and drag inside your terminal to select cells as you would inside your GUI. And if we get that far, I mean, you may never have to leave your terminal again, Nick. I mean, this machine might last you another decade. That's right. I hope so. Another decade.
Starting point is 01:13:02 Hey, friends, I'm here with Brandon Fu, co-founder and CEO of Paragon. Paragon lets B2B SaaS companies ship native integrations to production in days with more than 130 pre-built connectors or configure your own custom integrations. Brandon, there's a certain level of pain that a product team or an engineering team has to endure to, let's just call it it rolling your own integrations. Help me understand that pain, that angst for those teams. Help me understand that true pain of delayed integrations for a product, not integrating or having to roll your own integration, this seemingly slower route to integrations. I think for context, one of the reasons we
Starting point is 01:13:42 started Paragon is that today the average company uses over 130 different software applications. So that means if you're a B2B software company selling into the markets, there's over 130 of your customers' applications that you probably need to connect your tool to. Because customers today expect that any product they buy is going to work seamlessly with the hundreds of other applications that they're using. Of course, we see this when companies come to us and they say, hey, we have a backlog of 10 or 20 or 50 integrations that, you know, our sales team has told us we're losing deals because customers are asking us to integrate with all these different apps and we can't deliver on those integrations or maybe our competitors are integrating with these tools. And the problem that that results in for product and engineering teams, of course, is how do we build and maintain these integrations in a way that's scalable, that we can not just satisfy what customers are asking for us today, but we can
Starting point is 01:14:34 maintain those integrations in a way that's scalable for the next hundred customers, the next hundred integrations that we need to build. So for engineering, one of the challenges, obviously, the backlog and prioritizing time for certain features or integrations. But then there's this other side where you got to really learn every single API and everything is hand-rolled, custom, maintained. And over time, that kind of gets, I got to imagine, kind of taxing on teams. What do you think?
Starting point is 01:15:03 So most engineers know that, you know, every API is completely different, can be completely different in terms of how they handle authentication, in terms of how they deal with different record types. And so it becomes this problem for engineering teams to basically have to become experts in other people's APIs
Starting point is 01:15:20 and what could be dozens or hundreds of different APIs. And to build those integrations, we've seen can take as much as three to six months per integration for a developer to write the code to build that integration. And it depends on the use case, of course, and the type of product that you're integrating with. But of course, that becomes a massive challenge at scale
Starting point is 01:15:41 when you're looking at how do we scale our product to support 10 or 20 or 50 different integrations. So again, Paragon was really designed to solve that problem and to distill the complexities and the nuances and the differences between hundreds of different SaaS apps into a single connecting platform, into a single SDK that your engineers can install in your app app and then easily connect your products to all these different SaaS applications in the market. Okay. Paragon is built for product management.
Starting point is 01:16:10 It's built for engineering. It's built for everybody. Ship hundreds of native integrations into your SaaS application in days. Or build your own custom connector with any API. Learn more at useparagon.com slash changelog. Again, useparagon.com slash changelog. Again, useparagon.com slash changelog. That's U-S-E-P-A-R-A-G-O-N dot com slash changelog.
Starting point is 01:16:40 I was thinking about this while we were going beyond the norm of a developer tool, so to speak, to maybe go one layer deeper on developer tool. And I don't know if this is watching this show, but I saw PagerDuty mentioned in this list as you were digging into this list further, Jared. So I was following you. And I saw PagerDuty and I'm thinking like, okay, well, there is PagerDuty-TUI, a minimalistic terminal UI to manage triggered incidents. And so I'm thinking, gosh, well, I don't want to go to the Sentry dashboard. Can I just TUI this thing in Sentry? And there's nothing in here for Sentry.
Starting point is 01:17:18 But I'm thinking like particular dev tools that are, you know, web UI dashboard based things like Sentry or others might be would it make sense to have a TUI? Because hackers be hackers give me an interface that is just simplified, not the extras just the things that matters is there room for a TUI in the world
Starting point is 01:17:40 of like a Sentry or maybe even, who do we use for our analysts again? Plausible? Plausible. Yeah, like things like that. Like could there be a TUI for Plausible and Sentry and obviously Pay the Duty or something like that? Like I would welcome that personally, right?
Starting point is 01:17:54 I would. Yeah, I think so. Especially with that type of data. It's like you don't necessarily need to see the pie chart, but the numbers matter. And if the TUI output them in a way that was glanceable, then you get the same information. So yeah.
Starting point is 01:18:07 Quick check too. It's like, I don't have to exit my terminal. I can maybe even have a TMUX session with it already there. Exactly. You know, it's already in my world. See? Now you're thinking. Sentry, you should do this.
Starting point is 01:18:21 I think Plausible should do it too. I think that's a great example of like something that you normally would go to some sort of web interface to check. And there's something powerful in the constraints that the terminal does put on a design, I believe. Even though we're starting to see more richness in tools like this one. Where it might actually even be quicker. Better. And just better information architecture and all that stuff. If you're like, we have to provide a really simplified view for the terminal and then you just
Starting point is 01:18:49 ask yourself questions like what really matters you know versus like showing them all the widgets you know and so that could be really cool yeah simplified ui is is a big deal i think um i'd imagine they can probably put a a search or query kind of like bar in that UI to interact with the data too, to some degree. Like almost a command line for the TUI to change the data UI or just maybe even buttons or something like that that makes it a bit more rich. The challenge, I think, is that, and maybe this is something we talked with, what was his name, aoogle, first name?
Starting point is 01:19:26 Which one? The fellow that did Textualize and Textual. Will Magoogan. Will Magoogan, Magoogle. I was thinking about a different friend of ours. That fellow from Google. I was thinking about Magoogle from that GitHub Universe trip we did. Remember that?
Starting point is 01:19:41 That crazy drive there? Yeah. Oh, man, that didn't make it into your highlights video, man'm sorry about that i didn't take any pictures of that trip probably not but i that conversation we had with them i think it was pretty i'm just wondering how much we'll link that up in the show notes by the way we had a great conversation with will about textualize and textual and rich and really just this idea of where two weeks can go and i think that was a precursor to a lot of this stuff. Really just maybe a 101 on where this thing is going.
Starting point is 01:20:07 But realistically, how defined is the interface standard, I suppose, for a 2E? They seem to be all over the map. And so maybe that's why they're less appreciated, maybe adopted, maybe developed, because there's no kind of rich standard.
Starting point is 01:20:21 Like there is for iOS, for example. Or even like when you're web designing these days, you usually begin with mobile screens first or the smaller screens first. And that sort of sets the bar for your larger screens. And I'm just wondering like there is no true standard thus far. Or like just a, what's the right word for it? A system, a design system for these things. I almost feel like if you did that and you had components, maybe it might be
Starting point is 01:20:50 maybe that's what Textual does. Rich does. I don't know. Yeah, it's kind of moving a little bit away from the Unix philosophy, even though you're still like right there alongside all the Unix tools. Because instead of doing one thing, you're doing lots of stuff, right? Like it's stateful, there's lots of features inside of a one thing, you're doing lots of stuff.
Starting point is 01:21:05 It's stateful, there's lots of features inside of a TUI, etc. And you're kind of abandoning this idea of inputs and outputs, everything is text. I've noticed a lot of these tools will have some sort of alternate output mode and it's usually JSON, which makes some sense because JSON for most tooling is
Starting point is 01:21:25 actually less work to parse than text is in the case that you don't know what the text is going to be until you start to use it. Of course Nick probably can just set and cut it to exactly what he wants but that can be He's starting to think about his commands
Starting point is 01:21:41 to slice and dice this JSON I can see his eyes moving in his head. He's like setting, he's cutting stuff. He's like, oh man, text is the bomb. I don't disagree with that, but I am noticing a motion towards more tools outputting JSON, especially if they have a stateful UI where it's like the regular view is like this rich client
Starting point is 01:22:00 in your terminal. And then we'll also give you a JSON output. Not necessarily commenting on that, but I think that I'm noticing it as a trend. And so that's kind of going away from the Unix philosophy, right? Possibly. And then I think the standardization around inputs and outputs, everything is text, is it's not a user interface.
Starting point is 01:22:22 It is. It's an interface. It's a programmatic interface. It is. It's an interface. It's a programmatic interface that has become a standard amongst Unix-like things, which now we have all of these rich things inside the terminal. I'm sure the charm toolkit works differently than the textualized one, probably works differently than the Ratatouille one.
Starting point is 01:22:38 And so you may have to learn a UI every single time as you adopt these, which could be a barrier to adoption. Nick, you were going to say something. Yeah, just a little bit. And it's related to that as well. Just, you know, I'm sure you guys remember the old days with like flash and, you know, trying to build your own flash application was a little bit challenging because it kind of just had this white blank screen and then you could literally do anything like whatever you wanted to put on there within
Starting point is 01:23:00 reason can be done. But with like HTML, you have some structure, you have like an H1 and, you know, link tag and some other stuff. So you have these little components to build something, which gives you a constraint, but it's still flexible enough to build the things that you'd like. But yeah, it would be interesting to see if some of these more defined, I don't know, terminal UI toolkits come out,
Starting point is 01:23:18 or if they're not already there, if that would help spark a little bit more interest in building tools like this. Well, that was the hope, going back to the conversation we had with Will, was he had a big idea, which it would be fun to revisit that with him, Jared, because he had some, I would say we even pushed back in the last 20 minutes on his philosophy for being the founder and CEO of Textualize, which I believe is a company he founded and formed around this textual, textualize, rich, all these projects around this idea of twoies. And I think we were like, you just want to take these twoies to make them websites?
Starting point is 01:23:55 It seemed like an oxymoron, like that doesn't make sense, really. Counterintuitive to the idea. So I'd love to revisit that but if we had a champion like I think Will was trying to be around standardizing what TUIs are popularizing them and then giving people the training wheels slash frameworks slash components so that it's a little easier to build them I think would be a step up because I'm a user of them and if there was more of services I use, like Sentry or whatever else is out there, Plausible, I mean, where else could you use this stuff?
Starting point is 01:24:29 Like any place you would want to use a little dashboard just to get a version of it. You know, I know KDS has, wasn't there a CMO painted glass thing that Gerard had back in the day when we were on Linux? Yeah, canines. There's all that for all these different applications. Docker has versions of them, I'm sure, right? Right, right? There's all these things out there for Docker that you
Starting point is 01:24:48 can see like, okay, here's all my containers running. Here's the CPU usage of each of them and what the status of it. I mean, they're here to stay. I wonder if we just had better tooling underneath and maybe that's what Will and team are doing for this. I don't know yeah for sure it's actually another interesting segue or like what's the difference between like a cli tool that's not a tui versus one that is like docker is a great example like there's a docker stats command that you can run and that will just list out all your running containers and give you
Starting point is 01:25:18 the outputs of like the cpu memory disk and network like you know just little stats about those things and you And there is this medium ground, I guess, between a CUI and a TUI for output. Have you guys ever used the watch commands? And some commands just support dash dash watch, like Kubernetes as well. It'll just watch a program and will let you know when
Starting point is 01:25:38 the outputs are changing. So it's like DockerStats almost feels like it's just doing that. It's not quite a TUI, but yeah, there are other tools dedicated. It's a PUI doing that. It's not quite a TUI, but yeah, there are other, other tools dedicated. It's a, it's a PUI actually. It's a plain UI. Yeah. But I actually going back to what Adam said before around his definition of
Starting point is 01:25:52 TUIs being more like application-like and just going back to like the Unix philosophy, I do think to some degree, like when you're using an application, you like, there are certain characteristics of the Unix philosophy that you almost don't care about. Like if you had a TUI to have an MP3 player, it's like you want to open that program, find the MP3 that you want. Maybe there's some bouncing lines with the EQ or something.
Starting point is 01:26:13 That'd be cool. Maybe some metadata about the file being played. That's what I care about because I'm using that application to select and play an MP3. But I guess technically, I mean, Adam, and you know, Jared, you mentioned this with like JSON output. Do some of these TUIs also offer flags or ways to run them to where like, if you wanted to get that metadata back, you can get that back in text form.
Starting point is 01:26:32 And now it's like suddenly back to, hey, I'm getting text as output. I can go and pipe that to something else. So you kind of get the best of both worlds. The TUI when you want to use it as an app and the outputs for when you want to do something else. Yeah, absolutely. Obviously it's app by app. An MP3 player, like what kind of output when you want to do something else. Yeah, absolutely. Obviously it's app by app.
Starting point is 01:26:46 An MP3 player, like what kind of output would you want from that necessarily? Maybe like your list of played, recently played, or maybe I did find a podcasting app, which I threw in here called Castero, which I downloaded and tried. And yes, it does work. This is a Python thing, so you pipx install it. It doesn't look like it's necessarily maintained. It did work. I did listen to a little bit of changelog news in there.
Starting point is 01:27:14 That was pretty cool. And when you launch it, now this is like a three-pane thing with your feeds, your episodes, something like that. That would be two pan two pains i don't know it's like your podcasts your episodes and then what's currently playing or something and my big gripe with that one is the space bar for some reason doesn't play pause it like moves up and down anyways that's a small gripe but i just think what do you think what are you thinking man come on everywhere the space bar it's a play pause or a quick look.
Starting point is 01:27:46 And so when you launch it, you're like, I got to load my feeds into this thing. And you can load in and out of, I think, OPML. And so I could see where Castero with some sort of flag, like launching it, not the TUI, but some other version of the program where it'll just output your OPML, your subscriptions list as XML or whatever it is.
Starting point is 01:28:04 I could see that as a alternate way to run the program and get some output that would make sense to pipe somewhere else. But yeah, I think it's contextual. I think some of them, it makes total sense. Like a tool like posting, which is its entire point is to do like HTTP requests and bring you back the information after running it.
Starting point is 01:28:23 I can see where you can put together a collection, maybe through using the user interface, set it all up, and a lot of people use these things for integration tests, and you can maybe take that collection, save it as YAML, and then you can run it from the command line with some sort of alternate flag to where it's not going to launch the user interface. It's going to provide you a Boolean, true or false, did it pass?
Starting point is 01:28:44 You know what I'm saying? I like the idea of the TUI slash command line utility being symbiotic in the fact that you might hop into the TUI to do a more deeper visual application-like experience that also has, like you said, a configuration or setting i'm thinking like even tailscale i'm wearing the t-shirt today big fan of tailscale not sponsored where they can even have a tui like that where you've got multiple machines across your tail net kind of thing you might go there and configure a collection of machines you know i don't know do some cool stuff in the tui but at the same time you still have the traditional tail scale cli or
Starting point is 01:29:25 even the same case here with with posting it's like the application is just one more way you enjoy the cli the command line interface that's there it's just a visual version of it built probably on top of it with textualize or text or rich or whatever they're trying to use i think more people should adopt these things, man. It's just like an underserved market. I like it. Please do more of it, please. Let me ask you one question here, Nick,
Starting point is 01:29:53 on this Docker stats, if you don't mind. Because I have a question. Because I did this on my Plexbox, which is an Ubuntu machine in a VM on Proxmox. So it's got a single usage. Yes, I know I'm running Docker on top of a VM on top of Proxmox. It's multiple layers. It's kind of unnecessary, but I like it because it just keeps it siloed. But anyways, I digress. So when I write or when I type in Docker stats on this Plex box, which it literally is only a single Ubuntu box dedicated to running Docker to run a single Docker container, which is
Starting point is 01:30:34 the Plex Docker container, just to give you a full circumference of the reason for the machine. The CPU, I run Docker stats and it's realtime. The CPU is at 66 point whatever, right? But then, because I don't run Tmux, I go into a new tab and I SSH back into that box again. And then I type HTOP because that's what I have on that box. And I see that my CPU is not being taxed at all at that percentage. What's the deal? Why is DockerStats saying such a high CPU usage and it's not?
Starting point is 01:31:07 Yeah, I mean, DockerStats would be reporting the CPU usage of whatever's happening in the container, but I mean, that's still affecting your host operating system CPU. No, it's not like a magic CPU that's just going to exist. So that CPU load should have carried over. I mean, I have to look at your setup in a little more detail. I mean, when you run any Docker command, you're connecting against wherever you have Docker running, right?
Starting point is 01:31:28 Well, I can tell you on HTOP, the average CPU usage right now is 4 point something. Whereas in the Docker stats, real-time update, it says 64%. I was just wondering, like, maybe it's a Docker thing. Maybe this image is allocated a certain percentage of the CPU and of that slice that's been given, there's a high degree of usage being used. I wasn't really sure. Anyways, that's all this shows about. I was just kind of curious. That is a possibility too. You'd have to look at
Starting point is 01:31:52 the command that was run because there is a way to set CPU and memory limits on a container. Okay. I'd like to know more about that. Do you have a video about that? Actually, no. So I'm going to put that in my drafts. Put in your drafts, man. And when you post it, tell me and I'll help you title it. Yeah, I was going to say maybe I'll put Adam in the title so he finds it. I'm not searching for myself out there. Help Adam with Docker.
Starting point is 01:32:17 And then all the results come back. There you go. What can we do to get more people to do these two each year? That's what I want to know. Can we just keep doing podcasts about it every other year or so? Just constantly. That's it? Just do a watch, you know, or sleep seven or watch. I don't know. How does watch work exactly, Nick, in terms of how often it runs? Does it run every second? So I think it might be a second or two by default, but there is a flag to, to, you can set the interval and then it'll just like output new changes and let you know when it changed. Like there's a little timestamp that happens. Yeah. I've used it in the past. I know Gerhard used it all the time. And then it'll just output new changes and let you know when it changed.
Starting point is 01:32:46 There's a little timestamp that happens. Yeah, I've used it in the past. I know Gerhard uses it all the time. I think it's a great way to basically build your own little stateful command. You're taking a stateless command and you're just running it on repeat, which is like, what is a user interface if not some sort of event loop
Starting point is 01:33:01 with things updating at a frame rate? You're basically doing that by using the watch command, which exists on every Unix-like system probably out there today. Yeah, that demo he gave us was the bomb. Did that make it to YouTube yet? It's in the drafts folder. It's going to hit YouTube. This was our recent Kaizen.
Starting point is 01:33:19 Nick Gerhardt demoed a pipe dream of mine, and he did a really good job. He actually had an entire scripted user interface I mean I'm sure I actually don't know how he put it together it was a script but it had a lot of it was magical had colors it had state I think it's just running different user prompts throughout which we'll put on YouTube but I'm not sure how Gerhard did that he probably used dagger that'd be my guess if I if sure how Gerhard did that. He probably used Dagger. That'd be my guess. If I know Gerhard, he probably used Dagger. Well, you're talking about
Starting point is 01:33:50 watching Docker stats. Have you seen this Lazy Docker one? I know this was in the list. It's in my list. I did not try it yet, but it's on my list to do. So there's three tools built by Jesse Duffield, Lazy Docker, Lazy Git, and Lazy NPM. And they're all of a similar ilk, of course, sponsored by Warp, which is interesting. Warp is sponsoring Jesse's work on these things. You can tell because there's a big special thanks to Warp and the Readme. And it looks a lot like your Docker stats there, Nick, except for it's interactive.
Starting point is 01:34:28 You can select different images and see more information. You can just watch the animated GIF there in the Readme if you haven't yet to see what I'm talking about. Would that be something that you'd be interested in using? Or, I mean, are you just good to go already? Because I know you're kind of shying away from these things, but this one looks like it's pretty useful. I mean, I guess it would be, when would I use it? Like what would be the use
Starting point is 01:34:48 case that would be like, okay, now I got to use this. Cause I do know, like, for example, the other month I was doing a Kubernetes update, you know, just updating from version, whatever, 1.28 to 1.29. And that process, when you have your own Kubernetes worker nodes requires like creating new nodes, you need to join the cluster. And there's like a whole like, you know, sequence of events that happen. And in that case, yeah, I just use Kubernetes like watch flag on like the nodes list. So I can see these new nodes coming up. When are they being like drained? When, you know, when are they ready and stuff like that?
Starting point is 01:35:16 So it's like little one-offs like that. I don't know, like watch goes pretty far, but here, yeah, I don't know. I'm curious to either of you have a use case in mind where you would use this tool. I don't use Docker. Okay do either of you have a use case in mind where you would use this tool I don't use Docker hmm okay took the easy way out he's hardcore against Docker I'm not
Starting point is 01:35:32 I just don't like it very much I tend to I have one machine that I have more than one Docker container running on and it's like
Starting point is 01:35:40 the one machine that's like it does like home assistant and like other automation stuff and it's it's sort of like not in a good state because i don't have time to tinker with it but i do have a single machine that is a vm that is intended to be more beefy for multiple applications running a dock and i think in those cases i would want something like that because then you have maybe
Starting point is 01:36:03 a docker network you've got multiple applications, you've got different things happening, at least on that machine. And it's kind of like HTOP or BTOB++ or Bashtop for Docker, essentially. You're seeing your services, the containers that are running, the images that they're using, config stats. It's kind of like that for Docker. Logs. I mean, I don't know if I would dig into it, but I would certainly crack it open at least once or twice just to see how cool it is
Starting point is 01:36:30 to command this world. To have a single box for all these services. No, it is nice because even like Docker Desktop is like the GUI version to look at some things about your containers and images and volumes and stuff. And it displays similar-ish things, but here is like that same information on the command line.
Starting point is 01:36:46 So it is nice. Well, you need that for a headless machine. So in this case, I'm SSH-ing into it. There is no, you know, you need a TUI. And that's a great, actually a good example of like where a TUI really applies is like when you're just SSH-ing into a box that has no monitor or no GUI, you need a TUI. No GUI? need a TUI. No GUI, get a TUI.
Starting point is 01:37:07 And here's the biggest pitch ever to use Lazy Docker. It looks like DHH is a sponsor, so his avatar is in there on the readme file. Well, let me give you the actual pitch because Jesse has taken a moment to read or to write an elevator pitch. And I'm going to read this to you, Nick, and you tell me if he sells you or not.
Starting point is 01:37:26 He says, minor rant incoming. Something's not working. Maybe a service is down. Docker compose PS. Yep, it's that microservice. It's still buggy. No issue. I'll just restart it.
Starting point is 01:37:37 Docker compose restart. Okay, now let's try again. Oh, wait, the issue is still there. Hmm, Docker compose PS. Right, so the service must have just stopped immediately after starting. Hmm. Docker compose PS, right? So the service must have just stopped immediately after starting. I probably would have known if I was reading the log stream, but there's a lot of clutter in there from other services. I could get the logs for just that one service with Docker compose logs, dash dash follow microservice, but that dies every
Starting point is 01:37:59 time the service dies. So I need to run that command. Every time I restart the service, I could alternatively run Docker compose-compose up my service. And in that terminal window, if the service is down, I could just up it again. But now I've got one service hogging a terminal window, even after I no longer care about its logs. This sounds like an infomercial. It's such a pain. But wait, there's more.
Starting point is 01:38:19 Yeah, I guess when I want to reclaim the terminal real estate, I can do control P Q. But wait, that's not working for some reason. Should I use control C instead? I can't remember if that closes the foreground process or kills the actual service. What a headache. This is a infomercial. He says, memorizing Docker commands is hard. Memorizing aliases is slightly less hard. Keeping track of your containers across multiple terminal windows is near impossible. What if you had all the information you needed in one terminal window
Starting point is 01:38:50 with every common command living one key press away and the ability to add custom commands as well? Lazy Docker's goal is to make that dream a reality. Sounds like Jesse needs to start using Tmux and his terminal problems go away. This is true. This is true. This is true.
Starting point is 01:39:09 No, but seriously, I will say, like I tried not to read it along. Like I was just listening to you and like the way he handles some of those objections, what was it? The first one to be like, oh, I'll just like follow that service or maybe I'll just up that one thing.
Starting point is 01:39:22 Like those were things going in my mind. So I think it did a great job at just demonstrating the usefulness of it. Yeah, you literally do those things and it works for you. And he obviously knows how to do those things as well. It is a pretty good elevator pitch. But there's something about knowing
Starting point is 01:39:37 the pain of something enough that you just do it and you kind of just become calloused to the pain and you're like, well, that's just what I do. I do the Docker Compose PS thing and then I do that thing. But yeah, Tm of just become calloused to the pain. And you're like, well, that's just what I do. I do the Docker Compose PS thing and then I do that thing. But yeah, Tmux does solve a few of these problems. I feel like you're indirectly telling me to upgrade my computer already because all the pain I'm experiencing. I told you that directly about an hour ago, so I wouldn't need to be so coy.
Starting point is 01:39:59 No, but yeah, if you had a production server, we had a whole bunch of different containers running, like not in Kubernetes or something, and you just want to have an outlook of all of your Docker related things. Yeah, I can definitely see that being useful because you're right. It is annoying to like up arrow, enter, control C, up arrow, switch to the tab, do this thing. If I can just look at a screen and monitor that stuff, that is a win.
Starting point is 01:40:17 That is a quality of life improvement. Right. All right. So we're selling it here, Adam. We're getting them over to our side, the TUI world. Slowly but surely. I've moved to about 10% now. At the start of the show, I was at like two.
Starting point is 01:40:29 Resistance is futile. All will be assimilated. By the way, earlier you mentioned that, you know, Adam, you wanted to get a little bit more interest in folks like contributing towards the TUI ecosystem of things. And I think you guys joked around about starting a podcast around that one. But you guys do have Ship It, so I think you need to start T.Y. It. T.Y. It.
Starting point is 01:40:49 Well, that's not our game, man. No? I like your ideas, but that's not our game. What's our game? I don't know. I think I would actually really encourage Will to do that kind of podcast because Jared and I are not the epicenter of that. I think we would welcome him on the show
Starting point is 01:41:03 and encourage them to create their own content because that's their world, in my opinion. And I would support it from externally and report it to the masses, but not be the... Like, I suppose if I had Tooie Inc. and I was trying to build the next big thing on top of Tooie's, there was some sort of advantage there, then I would. But our advantage is keep the main thing the main thing and the main thing is not twoys the main thing is i would suppose like developer culture developer happiness the latest tech that's evolving where trends are going why should we care those kinds of questions but i don't discredit the idea just not for us okay what would you name said podcast?
Starting point is 01:41:46 I mean, obviously you said Tui it, but I didn't think that was a terrible name for myself. No offense. Tui up. Tui up? Yeah. A little better. Not Tui down.
Starting point is 01:41:53 How about Tui for Yui? I bet you tui.fm is available. I mean, just to keep it super short URL. Yeah, that'd be cool. T-U-I dot F-M. Or T-U-I F-T-W dot F-M. You know, that'd be a good company name. Careful, Nick. If we
Starting point is 01:42:12 land on a good name here, Adam's going to completely change from not our game to this is totally our game. We need to make this podcast. I'll stop there. Stop with a really bad name like Tooie for Yui. Yeah. You've won the worst name possible.
Starting point is 01:42:28 Yeah, I did. I beat you on the Tooie it. Well, I think Tooies are fun. I think I would summarize it. I don't know how much more deep we want to go back. I think. I think we're plenty deep. There is a place for more Tooies out there.
Starting point is 01:42:39 I do enjoy a good Tooie. And if it was a sandwich or a meal of sorts like a tui sandwich num num num you know all day long give it to me is this a spanglish callback if it were a sandwich or some food what would it actually taste like like how would you describe tui as a taste bright flavorful lots of flavor scrumptious, yummy. Gimme, gimme, gimme. I'm not going to wade into that pool. We're going to let Adam have the final say on that.
Starting point is 01:43:15 All right, Nick, anything else you want to say about this or any topic before we let you go? No, I think this was a really fun episode. I learned some new things. I may need to explore TYs in a little bit more detail. Yeah. There is one thing I want to say before we let you go. No, I think this was a really fun episode. I learned some new things. I may need to explore TYs in a little bit more detail. Yeah. There is one thing I want to say before we go. Can I say one more thing? I think this is worth sharing this.
Starting point is 01:43:34 Is the installation process. You can't just get the TUI right. You have to get the install process right. And I don't know how you all feel, but if the only way to install is via NPM, you're doing it wrong. Can we do an unpopular opinion i feel like that's like that's a popular opinion i'm terrible at unpopular opinions i am so with you on that one yeah i will not if i have to install node to install your tool and it's nothing against no this could happen to ruby or whatever like It's the same thing. I much prefer either give me a binary
Starting point is 01:44:05 I can just curl down and run it. Or, yeah, if you have built-in package manager support for my OS, that's nice too. Yeah, I didn't mind the process that I mentioned for Btop, or Bashtop, I should say. And that may have been dated, which was to
Starting point is 01:44:21 do the add app repository and the PPA version of it, and then literally update apt and then install the bash top application. I didn't mind that, but don't make me use a thing that's not even intended to be on my system that has no place on my system because it's not my desktop. It's maybe a remote machine or a standalone VM that I just don't want to have. I want to keep it minimized. And if the only way to install is via only Node or NPM, then I don't like that.
Starting point is 01:44:51 I want to have a native way to install it for my system. Yeah, I think a great point around that one too is just like adaptability or adaptability of a tool at maybe like an organization. Because right now the place I work at, you know, we've got 15 developers and, you know, we're allowed to have macOS. We can have native Linux.
Starting point is 01:45:06 You can have Windows with WSL. You know, these are all viable setups that you can have as your dev environment. And if I'm writing a script or a tool to help automate setting up tools on any of those devices, you know, it is nice to have a way, like go to GitHub release pages for the project
Starting point is 01:45:21 and just download that binary for that CPU architecture, you know, that base operating system, and then that will just work. And there's little variables, you know, you can run the command line to, like, get those programmatically. So you have one command to run for any system that's going to be installed on.
Starting point is 01:45:36 No extra, you know, dependencies or if conditions or whatever. I think that goes a reasonably long ways. Yeah, I definitely want to pay attention to the install process. I would say installation and initial usage is, to me, is key for any TUI. It might seem obvious. Just simply type in bash top, for example, after you install it. That might seem obvious, but at least give me that next step in your docs where it's installation for my system. I'm cool with brew. I'm cool with whatever else is out there. If you have an Ubuntu system or you're using apt, you know, give me that app flavor. If it's a binary and you want me're using App, you know, give me that App flavor.
Starting point is 01:46:05 If it's a binary and you want me to pipe it in the bash, I'm cool with that too. I'll obviously check the file first before I do that because, hey, that's just crazy. Or check the source code and just double check that. But then after that, like, what's the very first next step to enjoying the tool? What's the config like?
Starting point is 01:46:22 What's the setup like? And I think for any TUI, that is that's just like how you document it, how you get people into it. Yeah, I'm a big fan of just seeing the tool being used on something real, like a use case of here's how to solve this type of problem. I love that stuff. But even going back to the installation
Starting point is 01:46:38 Adam, would it help? Like let's say that the tool is just not a binary you can just install, but you need Node or you need something. I think even if they wrapped it up in a Docker image so you can just run it as a container quickly, at least to get a feel for the tool like day one, I think that goes kind of a long ways. That'd be kind of interesting actually
Starting point is 01:46:53 to have a demo as a Docker image because you can set up like your own little dummy file system there if it required some demo data basically and provide a world where you're like, hey, let me try this out and I don't have to like muck up my my install like my machine keep it vanilla keep it pristine because even like
Starting point is 01:47:11 on a vm before i do some of the stuff i'll i will back up that vm if it's necessary you can't back up a machine pretty easily but you can do that with a vm on proxmox or a cloud box or whatever i like that because you can easily now that assumes you've got Docker. That's a pretty good assumption of most developer machines these days, aside from Jared's. He's just like, don't even touch my machine with D-O-C-K-E-R. Get it
Starting point is 01:47:36 out of here. No Docker here. It's just too slow. I have Docker installed. Oh, you do have it installed. Okay, never mind. I just don't want to. But I have to because I'm a developer and sometimes you just need it. So Docker won basically. Yeah, they won. They won big time.
Starting point is 01:47:52 But I'm with you. If you had a Docker image that's like, hey, let me play with this, that'd be kind of cool. I think it'd be good for mileage for new adoption. Probably be good for mileage potentially even a dev setup to maybe more easily contribute. It can be a dual-facing use case for using Docker in that case,
Starting point is 01:48:10 like a demo as well as maybe contribution. Yeah, I actually love that. That's another angle that's really important. The more people that can contribute towards the project, even just opening up a PR to do some small patch, if all I have to do is just run a container and that's it. Absolutely. Sign me up.
Starting point is 01:48:27 Yeah. I love that idea a lot. Honestly. Like if I could just dock and pose up anything, I'll do it. You just send me a command or anything whatsoever. I'll just do it. That's like in the show,
Starting point is 01:48:40 Jared. Just do it. Just do it. Send Adam a command, anything. That's right. And he'll just do it. Prefaces with Docker compose. And I will do it. Just do it. Send Adam a command. Anything. That's right. And he'll just do it. The preface is with Docker Compose.
Starting point is 01:48:47 I will do that. Alright, well, Nick, always good to catch up. I think we should do more shows like these with you because it's always fun. Yeah, thanks a lot for the invite. And if anybody's curious, we mentioned I had two and a half gigs of hard drive space at the start of this episode. I've been
Starting point is 01:49:03 recording this locally just as a backup if needed. It still shows that I have nine hours remaining of disk space. So even though a wave is being output, we're still pretty efficient. Wow. Wow. Even on that old hardware, you're doing good. We can keep going then. Yeah.
Starting point is 01:49:18 We're just nine hours away from denial of servicing them. That's right. That's right. That's a slow motion DOS. No, go ahead. But I was going to say, yeah, thanks again for the invite and happy to come on
Starting point is 01:49:29 whenever you want. Awesome. Well, you're a friend. You're welcome here anytime. That's right. Bye, friends. All right. Bye, friends.
Starting point is 01:49:41 Okay, that's it for this week's Developer Pods from Changelog. Hope you enjoyed them. Awesome having Nick back talking about TUIs this time, text, user interfaces. I love them. I hope they become more in vogue, but only time will tell. We do have a bonus for this episode for our Plus Plus subscribers. Learn more at changelog.com slash plus plus.
Starting point is 01:50:02 It's better. Some say it is better. I think it's better, but you should try it out. See for yourself. 10 bucks a month, 100 bucks a year. Drop the ads, directly support us, get bonus content, get closer to that cool changelog medal, and of course, get a free sticker pack sent directly to you. That's awesome. Again, changelog.com slash plus plus. Well, we couldn't do this without awesome sponsors and awesome partners. Today's sponsors are Chronitor, Century, and Paragon. If you try out Century, use the code changelog and get $100 off for three months.
Starting point is 01:50:36 And, of course, a massive thank you to our friends over at fly.io. To pull your apps near your users, too easy. Learn more at fly.io.io into the beat freak in residence, break master cylinder. Thank you for those awesome beats. That's it. The show's done. We'll see you next week. actually it's a quick closing remark that's maybe interesting around you know good stuff for free
Starting point is 01:51:13 so when i was actually traveling around portugal i was on the top of some castle i think it was saint george's castle i'm probably butchering the pronunciation but i was wearing the changelog shirt that you guys sent me the very first time I was on the show. Yes. And that is one of my favorite shirts, honestly. Like, I wear it kind of frequently. And this guy was just like, cool shirt. And I was like, thank you.
Starting point is 01:51:34 And he's like, I'm familiar with the show. I've watched so many different episodes. He knows who both of you are. Get out of here. Yeah. Isn't that weird? No, it was really cool. On a castle in Portugal?
Starting point is 01:51:43 Yeah. That's a small world, I guess. But it made me think, like, the only reason I accepted your invite to go on the show was to potentially get another awesome, high-quality, free shirt. The only reason. Well, now you're not getting one. Well, yeah. Now we have to do with your thank you code.
Starting point is 01:51:59 We're going to set the flag to no coupon code. To not send them the coupon code. Yeah. Just to spite you. You're going to adjust the price so it's code. To not send them the coupon code. Yeah, just to spite you. You're going to adjust the price so it's actually twice expensive, so I can't get it. The function is called has one or not, and you already have one, so you get not. No, the toggle is like, has he spited us?
Starting point is 01:52:17 That's right. And you just spited us. Oh, man. Check yourself, man. Ultimate backfires. But seriously, do you guys have a different inventory of shirts, or is it the same? Well, it depends on which one you got.
Starting point is 01:52:30 Do you have the OG? I have the cool. I don't know if it's OG, but it has the globe, and it says change log. Same one. Yeah, we haven't changed. But you can get a JS Party, maybe. Or you can get yourself a Kaizen shirt.
Starting point is 01:52:41 Or a tail scale T-shirt. We don't sell tail scales. That's what I'm wearing. Adam will send you the tail scale off his back. Yeah, so you could get a practically isolated. You don't have to get the changelog one. So you'd have two. You can get a different version.
Starting point is 01:52:54 You get a Kaizen. There's a few more Kaizens out there. Whatever you like, man. Hook yourself up. You have to have the special link to get the Kaizen. Cool. I was trying to give you guys a free plug on your awesome shirts. No, I loved it.
Starting point is 01:53:03 We're just messing with you. Yeah, that's so cool though honestly to rewind you can 100% have another t-shirt

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