Jerod Santo:

So we're hanging out with Nick Janetakis. 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?

Nick Janetakis:

Yeah, I must say I do.

Jerod Santo:

\[laughs\] You must. I'm over here sitting on like three and a half terabytes, I think, of available space, so...

Nick Janetakis:

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.

Jerod Santo:

So what's the ultimate size on that?

Nick Janetakis:

Well, the SSD is 250 gigs. I do have a one terabyte hard drive as well, just like an external one, but that's also getting pretty full.

Adam Stacoviak:

Is this a system you built yourself?

Nick Janetakis:

Yeah, just assorted parts off of -- well, back then \[unintelligible 00:04:38.19\] a little bit of Amazon.

Adam Stacoviak:

What's "back then"?

Nick Janetakis:

Back then? Like 2014...

Adam Stacoviak:

Dang, that's how old this machine is you're on?

Nick Janetakis:

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 put it out, build it. It's fun. But it just hasn't become a problem somehow. I can still record videos, and day to day usage... Yeah.

Adam Stacoviak:

What's your CPU?

Nick Janetakis:

It is a quad core 3.2 gigahertz. It's like an E4460, I think. An Intel one.

Adam Stacoviak:

You're missing out, man... Sorry about that.

Jerod Santo:

\[laughs\] Yeah, the last decade has been good in hardware advances, you know?

Nick Janetakis:

Yeah. Wait until you hear I have like a GeForce 750Ti as my video card.

Jerod Santo:

Oh, my goodness...

Nick Janetakis:

That is an interesting one.

Adam Stacoviak:

Yeah, I suppose. Well, you know, the new Intel CPUs generally have integrated GPUs, which is enough in most cases, really.

Nick Janetakis:

Yeah.

Jerod Santo:

Nick wouldn't know.

Adam Stacoviak:

13th gen just 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.

Jerod Santo:

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 gonna have the best upgrade of all time, aren't you? I mean, it's gonna be amazing.

Adam Stacoviak:

It's gonna be a good day.

Jerod Santo:

That's like how Adam starves himself all day, for that one meal... But that one meals the best, isn't it, Adam? I mean, you really go after it.

Adam Stacoviak:

You know, man, I have to tell you, I've been becoming a chef.

Jerod Santo:

Oh, yeah.

Adam Stacoviak:

Oh, yeah. That's all I'll say.

Jerod Santo:

I believe it.

Adam Stacoviak:

\[laughs\]

Jerod Santo:

Nick's gonna be a chef when it comes to building a recipe for his next machine.

Adam Stacoviak:

Nick, I'm half-tempted to donate some RAM to you or something, bro.

Nick Janetakis:

Well, don't worry, I've got 16 gigs...

Adam Stacoviak:

Okay. Well, you've got plenty of RAM. But does that RAM scale to your next system? What gen is that RAM even?

Nick Janetakis:

I couldn't even say the exact gen of the RAM, but the answer is no.

Adam Stacoviak:

Okay.

Jerod Santo:

This kind of reminds me of my very first MacBook Pro laptop, which was probably around the same time period... No, 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?" 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 doggin'. It was swapping, the RAM was gone... It was like "Please reboot me." But once I had the streak going, I didn't want to break it.

Nick Janetakis:

Yeah, it's weird how streaks work. I had something similar happen with this machine actually... So this machine predates Windows 10, which is what I'm running now. I used to run Windows 7 on there... And you know, at some point in time security patches stopped, and I wasn't getting autoupdated 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 pretty decent, because usually Windows will be like "By the way I'm going to reboot on Friday, and the next Tuesday..."

Jerod Santo:

Right... On Tuesdays.

Adam Stacoviak:

Was it Tuesdays? It's been so long, I forget.

Jerod Santo:

Patch Tuesday, isn't it? Isn't that the big day on the Windows side? I believe so. Nick knows.

Adam Stacoviak:

Yeah... I've got an idea for you though, Nick... You've got enough followers and subs on YouTube. I would -- I think you could probably put a call out there for like hardware folks... You know, get Fractal Design to give you a case. 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.

Nick Janetakis:

So you want me to sell out and shill some company stuff?

Jerod Santo:

\[laughs\] Yes.

Adam Stacoviak:

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 looking at your -- I'm 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.

Nick Janetakis:

\[00:08:44.19\] So here we go. YouTube video title, "How to pick the best motherboard to run Docker."

Adam Stacoviak:

Yeah. I mean, I don't think you really need to choose between motherboards to run Docker, do you know?

Nick Janetakis:

No.

Adam Stacoviak:

Okay, then. Okay. Just whatever is on the market. Anyways, you should do that.

Jerod Santo:

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've even seen you kind of reading some of your blog posts now on YouTube. Is that a recent thing you've started doing, or have you been that a while?

Nick Janetakis:

You mean linking to the blog post from YouTube?

Jerod Santo:

No, it's like "Here's a blog post", and there's also a video. And the video is effectively you either reading or summarizing the blog post. I mean, it's almost like an audio transcript in video form. And they link back and forth.

Nick Janetakis:

Sometimes, it depends. 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.

Jerod Santo:

Oh, I see.

Nick Janetakis:

But yeah, some of them it makes sense to write it first. But 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 "Well, it'd be interesting to see if that increases traffic to both sites, both YouTube and my own site", just by having a little bit more content on my site.

Jerod Santo:

Right. Have you had any good results from that, or are you --

Nick Janetakis:

So it's hard to tell. Hard to tell. Because I also disabled Google Analytics, so... Whenever they switched over.

Jerod Santo:

Oh. Which I don't blame you about, but... But how are you going to know?

Nick Janetakis:

I don't know.

Jerod Santo:

\[laughs\] Alright... Alright... Maybe just a feeling. Like, you'll feel like it's worth it. That's how I go on stuff a lot. I'm like "This feels right."

Adam Stacoviak:

Isn't there a plot hole we're missing on here, Jerod, though? The last time we talked to Nick, he was changing. He was like ending the podcast... I think even ending the blog, and like moving on to something -- like a gig. Ain't that true?

Jerod Santo:

I don't know, man. It's been so long that I don't remember it. Yeah.

Nick Janetakis:

Yeah. No, you're right about the blog. Or, sorry, hold on... You're right about the podcast, because I was running runninginproduction.com for a while. I did 100+ episodes, and then just decided to call it quits on that one. But yeah, the blog and the YouTube channel, they're still going strong. Weekly posts.

Adam Stacoviak:

So you haven't changed at all.

Nick Janetakis:

Since then, no. Interestingly though, I have done a lot of contract work... But one of the people I was working with, they did invite me to work full-time, as like an SRE/DevOps engineer/Developer Advocate/whatever you want to classify that role as.

Adam Stacoviak:

The do-all-the-things person.

Nick Janetakis:

Yes.

Jerod Santo:

The run-things-in-production person.

Adam Stacoviak:

That's right. Oh, man. And how did that go?

Nick Janetakis:

Yeah, that's actually going pretty good. It's interesting, because it's like a nine to six type of job, but it kind of feels like -- I was working similar hours, doing contract work beforehand anyways, and now it's just like consolidated into one company... Which has its pros and cons. If the company decides to lay you off, or something happens, you only have one revenue stream... But so far, so good.

Adam Stacoviak:

And you have courses still in play? Are you still doing courses, or no?

Nick Janetakis:

Yeah. Keeping those up to date. Still need to make some new ones... There's been a Deploy course in the works now since like 1935, but...

Adam Stacoviak:

Gosh.

Jerod Santo:

Older than your computer.

Adam Stacoviak:

You might miss out, because there's a lot of non-deployment happening. People ain't shipping.

Nick Janetakis:

No.

Jerod Santo:

He's slowing down, because he can't -- he has to slow down to keep up with his computer. He just can't go \[unintelligible 00:11:55.14\]

Adam Stacoviak:

\[00:11:58.07\] That's right.

Jerod Santo:

Do you have any pain from that? I mean, you're rendering videos, you're doing stuff... Are you ever like "I could wait--" I remember when we upgraded to the M\* -- I think ours are M1s. My mixdown inside of Adobe Audition 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've got to waste five minutes waiting for that thing; especially when you mess up, and you get a 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...

Nick Janetakis:

Right. No. If that were the case, I would have upgraded a long time ago. So you're right, definitely the video encoding is gonna be so much faster on a new machine. Probably like a 10x difference. But let's say I record a 15-minute YouTube video, and maybe that takes like 25 minutes to render... 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.

Adam Stacoviak:

"I also sleep..." \[laughs\]

Nick Janetakis:

Yeah.

Jerod Santo:

During his encodings he takes a nap, you know?

Nick Janetakis:

Right.

Adam Stacoviak:

This is the exact reason why people upgrade.

Nick Janetakis:

I spent my whole -- my whole life is optimized around me doing different things when I need to render a video.

Jerod Santo:

\[laughs\]

Adam Stacoviak:

Oh, yes. "Am I rendering? Okay, cool. Time to do X."

Jerod Santo:

It's like a forced Pomodoro technique. It's like "I've got 25 minutes. I've gotta go."

Adam Stacoviak:

I'm the same, Jerod. I have the iMac Pro at home as my kind of work home desktop thing that I use... I thought I would use it 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 record, so I can just edit the show here.

Jerod Santo:

Sure.

Adam Stacoviak:

Nah, man. On that Intel Mac, the mixdown was like --

Jerod Santo:

Too slow.

Adam Stacoviak:

...15 minutes. Unbearable. 15 minutes? No, thank you. When I can like spend a minute and a half at most on my M1 Mac. Forget it.

Jerod Santo:

I know.

Nick Janetakis:

This is a 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. 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.

Jerod Santo:

Sure.

Nick Janetakis:

And I really feel like having an SSD on both of them makes such a big difference. Like, if I didn't have an SSD, forget it. It would be like the end of the world.

Adam Stacoviak:

Yeah, you're probably not doing a lot of compression... But I would say your video work is what would really tax the GPU particularly, and then probably the CPU as well, with some of that at least.

Jerod Santo:

Yeah, certainly we're at a point now where common internet usage - you've got your Vim, you've got your terminal, you've got your browser, maybe you've got a music app running... You're not really gonna have much of a difference on brand new hardware versus - 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 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 XKCD -- the obligatory XKCD. I think it's 303... Where their excuse is that they're compiling, and of course, it's why they're having a sword fight in the hallway.

Adam Stacoviak:

They're sword fighting, yeah.

Jerod Santo:

So those are the things that you'll notice. But yeah, I mean, if you're gonna go take a walk... I mean, you've got -- I call that a workaround. But it's a lifestyle workaround, so it's the best kind, right?

Nick Janetakis:

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. Those I'll just start out before I go to sleep. I do sleep a good seven, eight hours most nights, so by the time I wake up, they're all done. It's like a gift just waiting there. All the videos. I didn't have to do a single thing like waiting around.

Jerod Santo:

Does it ever fail in the middle of the night, or do you ever like realize you made a mistake, and then you're like "Ah, I've gotta go to sleep again."

Nick Janetakis:

Gotta sleep again? Yeah.

Jerod Santo:

\[laughs\] Go back to sleep.

Nick Janetakis:

\[00:15:59.28\] No, 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 two days from now or something, that would have an effect. 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, \[unintelligible 00:16:17.27\] MMOs, FPS etc. And nothing modern, within reason, is going to run on my current machine. So I'm stuck to playing these 2D platform games.

Jerod Santo:

Well, I'm in the same world as you, because I play all my video games on a 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.

Nick Janetakis:

Yeah. Actually, here's a dilemma for you. My biggest dilemma 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 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, 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 I don't have a dedicated laptop, but I have this Chromebook that I modified to run Linux. But that's also like 10 years old, literally, and it 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 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?

Jerod Santo:

Great question. So I think Adam and I differ on this, to a certain extent... Go ahead, Adam.

Adam Stacoviak:

I'm pro laptop, honestly.

Jerod Santo:

Then I'm wrong. We do not differ. \[laughs\] Well, you always had a desktop, for a long time.

Adam Stacoviak:

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 with the newest stuff... And always, any sort of external display with a Mac has, as you know, Jerod, 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. It just sucks going from screen to laptop, because the stuff moves around; the windows move around.

Jerod Santo:

Oh, yeah. Unplugging and plugging...

Adam Stacoviak:

Yeah. It's my biggest -- I mean, how has Apple not solved that yet? Why is it a third party tool that works okay solving it?

Jerod Santo:

Right. So yeah, I've been pro mobility... I have had a desktop in the past, but I've always preferred a laptop. And that to be one machine to rule them all. 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 miniscule. I mean, it used to be more epic, as the pros were just like these huge honkin' bricks that you really didn't want to put on your lap, because they would heat your lap, \[unintelligible 00:19:14.01\] 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. 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. Laptop for life pretty much, at this point.

Nick Janetakis:

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. Maybe a new workstation and a laptop on the side.

Jerod Santo:

Well, you get that YouTube series going and you might get so much hardware it'll be coming out your ears.

Nick Janetakis:

\[00:19:58.29\] You know, funny enough, I have had one opportunity to get hardware, but it was for one of those... It was like an exercise bike. But like a really fancy one. A crazy one, with a big screen, and everything...

Jerod Santo:

Like a Peloton kind of thing?

Nick Janetakis:

Something like that, but it wasn't that brand.

Jerod Santo:

Sure.

Nick Janetakis:

But it felt weird to accept something that large, physically, and money-wise value, to be like "How does that relate to making a YouTube video on how to write a shell script?" You've gotta know how much of an audience crossover there is.

Adam Stacoviak:

I'll tell you how... I'm sure there's embedded Linux on that thing.

Nick Janetakis:

That's very possible.

Adam Stacoviak:

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.

Jerod Santo:

Then you find out that it's phoning home, and it's tracking everything you're doing right, and you can bust them.

Adam Stacoviak:

That's right. \[unintelligible 00:20:46.01\]

Jerod Santo:

"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...

Adam Stacoviak:

That is.

Nick Janetakis:

There we go.

Adam Stacoviak:

So just call us anytime you get new hardware opportunities, and we'll give you ideas to do or to not do.

Jerod Santo:

All kinds of stuff that we never do either.

Adam Stacoviak:

No, we don't. But it'd be fun. Peloton, send me a bike. I'll hack it.

Jerod Santo:

There you go. Well, let's dive into our topic for today. This is a follow-up to the last time we had you on, which - it 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 etc, etc, etc. And talking about modern alternatives to those, which have bells and whistles. So that was that episode; people can go back in the feed, episode 451. We will link it up. "Modern Unix tools, with Nick Janetakis." Today we're going to talk terminal again, or focus in on TUIs. I feel like TUIs are having a moment, a -- I won't call it a revolution... A renaissance. There you go. A renaissance. 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, 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 Ratatui. \[00:22:44.25\] *And the truth is, I have no talent at all. But this rat, he's the one behind these recipes. He's the cook.*

Jerod Santo:

Spectacular name, by the way. I'm gonna grab 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.

Adam Stacoviak:

Both.

Jerod Santo:

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 Ratatui in the Rust world is a Rust crate for cooking up - ah, 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; it's the reason why I bring that up. So like Ratatui is powering this movement, Charm, and Textualize perhaps more. Some people are just old school, building up ncurses stuff, hand-rolling their terminal or text-based user interfaces... But lots going on. \[00:23:56.15\] So there are so many TUIs now... In fact, we went out to the Awesome TUIs repo, which happens to be maintained by Ship It 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 TUIs to the world, to the show, to discuss... But let's start with maybe TUI, maybe not, but terminal 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 a command line junkie.

Nick Janetakis:

Yeah. So just general tips?

Jerod Santo:

General tips, or maybe a tool you've been using recently, or something you've learned... Anything you want. Open book.

Nick Janetakis:

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, sed and cut. Those three tools combined can solve so many random things that might come your way. For example, just a quick use case... You know, the business came at me and they're like "By the way, we have this Salesforce dump of 178 CSV files", and it was like 30 gigs of data. So we have -- let's call 180 files, a lot of data there, all with different columns, all with different rows, and it's like "Well, now we need to import that into a MySQL database." And if you try to do that by hand, what are you gonna do? You're gonna have to make like 8,000 different columns, and so many different tables, 180 of them or whatever... But yeah, I just threw together a little bit of shell scripting, and like 30 lines of code with like sed and grep and cut and all those combined, and we had a solution that got us 95% of the way there. It just autogenerated the CREATE TABLE syntax, and auto-filled out the columns with like \[unintelligible 00:25:52.02\] var car 55 by default, and then someone can go in there by hand to modify things as needed. And it worked out real nice. So yeah, just random, random stuff like that.

Jerod Santo:

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. Like a good chef, Adam; you know, put together different ingredients, and come up with an amazing recipe...

Adam Stacoviak:

That's right.

Jerod Santo:

...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 sandwich at one point?

Adam Stacoviak:

Yeah, what was that movie...?

Jerod Santo:

And 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 mouthwatering. 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 droolworthy?" Maybe Spanglish?

Adam Stacoviak:

Spanglish. It was English. Yeah.

Jerod Santo:

Awesome. Came back to me.

Adam Stacoviak:

Good movie. A really underrated movie, honestly. I think it's a solid, solid movie. A lot of good acting in that movie, in my opinion.

Jerod Santo:

I like that one. Nick, that's definitely good use... Grep, sed and cut. I was doing similar things with our Frontend Feud survey results... So we used 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?

Nick Janetakis:

Survey says yes.

Jerod Santo:

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. 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 and numbers, and then I would scrub and normalize and try to do some stuff... And then I'd 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 the SQLite command line to go inside there and query it. \[00:28:10.17\] And then I realized - or I was taught by somebody; it might have been Simon Willison. I can't remember who taught me... That SQLite actually has a CSV mode, and in-memory mode. And then it also will take queries directly from the the command line, so you don't have to go into like little SQLite UI, and do things from there. The prompt. And so I reduced -- this is not multiple tools together, but this is like just knowing a tool better... I actually reduced that entire process down to a single command line, that would take the original CSV from Typeform, open it in memory, in SQLite, as a CSV, which automatically creates the tables right there and everything, and then execute this specific query, and then output it the way I wanted to. And I was like "Oh, happy day." When you have something that just works like that, it's amazing. You're just cutting down five steps to one; you feel like you're superhuman.

Nick Janetakis:

Yeah. No, I love stuff like that. **Break**: \[00:29:11.06\]

Jerod Santo:

As far as tools we're using it, I'm still rockin' Atuin. Adam, are you still using it, Atuin?

Adam Stacoviak:

No. I don't have a need for it, I guess.

Jerod Santo:

Yeah.

Adam Stacoviak:

I use Warp as my terminal, and it remembers a lot for me.

Jerod Santo:

Oh yeah, you're using Warp on the terminal. Nick, do you know about Atuin?

Nick Janetakis:

No. Is it an actual -- like a terminal, or something else?

Jerod Santo:

Atuin is a history tool. So it replaces Ctrl+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 Atuin's creator, Ellie Huxtable. Yeah, we did a show with Ellie Huxtable, and it's one of these tools where it kind of disappears into the background. It's not like front and center. Because I'm never actually typing the Atuin 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 Ctrl-R-ing to search, or just arrowing up or down 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. I definitely am not going to uninstall. It's just small quality of life improvements over the default Bash history, or ZSF history.

Nick Janetakis:

Oh, yeah. It's interesting... 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.

Jerod Santo:

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?"

Adam Stacoviak:

For sure.

Nick Janetakis:

Let me ask you this. So I like using Ctrl+R all the time, and I happen to use FZF for searching through my history like that... Which could be classified as a TUI to some degree, because it is opening up a little interface that you can interact with. How does this tool compared to FZF? Have you tried both side by side, or in general?

Jerod Santo:

Not side by side, but I did use FZF for a little while... And you're gonna find very similar fuzzy finding with Atuin. It's a little bit better-looking in terms of like she's taking more time to make sure that the UI is nicer than I think FZS'es. And 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 Bashrc or whatever make sure that when you Ctrl+R, FZF gets invoked. And there's some steps to set up, right?

Nick Janetakis:

Yeah. And then on top of that -- I mean, if you're talking about history stuff, there's many different Bash or ZSH settings that you need to configure just to get your history set up so that you can see 50,000 lines' worth, and other things like that.

Jerod Santo:

Yeah, exactly... Which - I had done all that stuff, because I didn't know about Atuin until a year ago... And so if you already have all that stuff set up with FZF, you're gonna have a very similar fuzzy searching of your history with Atuin as you would with FZF.

Nick Janetakis:

Okay.

Jerod Santo:

Atuin 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? Or like, is FZF invoked at all in you're up and down arrowing through your history? Or is that just the standard Linux one?

Nick Janetakis:

No, if I'm just hitting the up arrow in my shell it doesn't invoke FZF. I mean, there might be some custom key binds to do something with that, but I haven't set that up.

Jerod Santo:

Yeah. So that's one thing about Atuin, is even when you up-arrow - I'm sure you probably turned this off - it will invoke the Atuin UI, 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 Ctrl+R. And so sometimes you're not thinking about Ctrl+R and you're just like up-arrowing, and you realize it was like "Oh, not that version of this command. It was a different one." And 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 will be relatively similar.

Nick Janetakis:

Right. Yeah, I just tested this now... So if you just go to your terminal with FZF and just hit Ctrl+R, that will bring up your search history there, and then you can kind of up and down through FZF's window. But you still need to invoke it with like a Ctrl+R.

Jerod Santo:

Right. So for folks who already have that configured, probably not a big win. But for people who are new to the terminal, or didn't know about FZF and how to set up the right environment variables to get their Bash or ZSH history to be 50,000 lines or whatever, installing Atuin I think is an easy one step that does all those things for you.

Nick Janetakis:

\[00:38:05.13\] So let me follow up with one more question about that...

Jerod Santo:

Sure.

Nick Janetakis:

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?

Jerod Santo:

Yes, so that's one of the core things about Atuin, is its unified shell history. Not just across your tmux sessions, 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 like you could have your shell history and synced across all of your machines via an end-to-end 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 typed 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 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?

Nick Janetakis:

Very much, and it's very not straightforward... Because it almost feels like the only way to solve this in like the best way possible is like just do what I want.

Jerod Santo:

\[laughs\] That's what I wanted to do as well, but I don't know that the computer knows what you want is the problem, you know?

Adam Stacoviak:

Like a mind reader... Does it say things like as if you ls-ed 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"?

Jerod Santo:

It's gonna be the entire command.

Adam Stacoviak:

Yeah, that's kind of painful.

Jerod Santo:

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's not smart enough to know "I just want the flags." I liked that version of ls, but now I'm doing it in different contexts. I want to change the path, or use no path. I think you can have it to just do that stuff manually.

Adam Stacoviak:

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, Jerod, and I know you already use Atuin - is that it does that. So I'm just tinkering on this spare Linux VM I have on Proxmox, because hey, I'm on a podcast talking about TUIs, so I'm gonna 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, they're there. So 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 zero an ad. They're not even sponsoring us. I just like them, and Zach's cool, and I like his team... And I believe it is a version of the terminal the future. There you go. \[00:41:42.07\] I think that they're doing things like team features, which I think would be cool because you can log into Warp and let those things transfer via their cloud service, if they do that. I think that's what they're driving towards. I wish they would do that more so as 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 of similar in that respect, because 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, like 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 --

Jerod Santo:

Does it support tmux?

Adam Stacoviak:

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 that are not easily discoverable. Because the Jerods of the world will just be happy with the defaults that you're given, and not all of the expressiveness that you can achieve if you would just tweak a few things... And maybe Nick is the kind of person like "Let me tweak this..."

Jerod Santo:

Nick knows all \[unintelligible 00:43:13.01\]

Adam Stacoviak:

"On this super-old hardware, by the way, but let me tweak this."

Jerod Santo:

\[laughs\] Yeah, exactly. Now, Nick definitely knows all the command line flags. Don't you, Nick?

Nick Janetakis:

Some of them...

Jerod Santo:

Yeah.

Adam Stacoviak:

"Some of them..." \[laughs\]

Jerod Santo:

I mean, he's written them down, at least. They're on his blog, they're on his YouTube. 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, 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 - I'm just not going to use it, because I live inside of tmux, pretty much everything I do. So that's the rub with trying to replace a lower-level foundational part of the stack, whereas Atuin is like a history thing; it's a smaller subsection of your terminal, is that you have to support all these different things. And there's a long history of weirdness inside of terminals that is just difficult. And so until then -- or they convince 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 that you can probably get that done. I'm a relatively vanilla user of tmux. I'm not an advanced tmuxer. But that's an education problem, right? They have to be able to teach people that they've done that.

Adam Stacoviak:

Yeah, I agree. I've never been -- I've used tmux several times, but I've never been like "Oh, this is the way." I never sat beside somebody either, or like pair-programmed, or pair-terminaled, which is probably different than programming... It's just like "Let me just see how you hack..." To really be like "Oh, well, I'm really missing something with tmux." Like, I've used it. It's kind of kludgy in some cases... But maybe that's because I haven't gotten past that - even like the Vim stage. I'm a fairly daily user of Vim, but very basic user of Vim. Even getting to the end of lines, or jumping lines, or copying multiple lines, or even yanking and pasting... Those are the -- I'm doing basics. I can at least get out of it, so thank you very much. But with tmux, I've never gotten past the whole training wheels, let me actually find usefulness, because - well, I guess I just haven't.

Jerod Santo:

Sure. Well, Nick, you're a tmux user, right?

Nick Janetakis:

Yeah.

Jerod Santo:

Give Adam the pitch.

Adam Stacoviak:

What's the pitch?

Nick Janetakis:

Okay. So if you like to use the terminal - let's say you're using Vim, or whatever editor, and you're 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 maybe if you're working on the Changelog source code, or maybe you have your own personal blog, or maybe you have a different project, like a side project that you're building, you can have a tmux session for all three of those things, and then use tmux to jump between each of those. \[00:45:59.28\] And all three of those sessions, they might have their own window layouts that are specific to that application. With the Changelog source code maybe you have your code editor in one window, maybe you have a Docker compose up, or however you run your application in another window... And then 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 right there for you, without having to be like "Oh, I've gotta open up my code editor, and split this window, open up a second terminal, and then do all these things." That's typically how I use tmux in my day to day, just to help me juggle a lot of different things... Because 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, 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, that's just a hotkey away.

Adam Stacoviak:

Yeah, I've been there to do some of those things. I definitely am not a daily driver in the terminal where I'm 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?

Jerod Santo:

Well, you have to set them back up again.

Nick Janetakis:

I have to go. See you later, guys... \[laughter\]

Adam Stacoviak:

I had to ask the question, because somebody out there is like "What's wrong with multiple tabs?"

Jerod Santo:

You mean like just your terminal has multiple tabs open?

Adam Stacoviak:

Yeah. Just like a new tab. Exactly.

Jerod Santo:

Well, then you have to set that back up again later.

Adam Stacoviak:

So that's the reason, is like the setup, the teardown.

Jerod Santo:

So let me give you an example that maybe would be enticing for you... Because you SSH into local boxes --

Adam Stacoviak:

Multiple machines, yeah. Exactly.

Jerod Santo:

So this is less of a problem as it used to be, but SSH sessions which have not the best internet -- obviously, on your LAN you're gonna have good connection all the time. But anytime you're like SSH-ing into a remote server where you may hang, you may have an internet outage, you may lose that session - this starts with GNU 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 \[unintelligible 00:48:05.18\] 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..."

Adam Stacoviak:

Right, moving files around, doing different stuff. Yeah.

Jerod Santo:

...now you basically just lost the connection to all that setup, which is still live on that remote server. So the next time you SSH in, you just tell tmux to connect to that session you had going, and everything's magically back. So that's a big win.

Nick Janetakis:

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... But by default, if you were to reboot your box and come back, all of your tmux state is going to be gone. You have to like start from scratch there. But there's this really nice tmux plugin called tmux resurrect. I've been using this one for quite some time 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, Ctrl+S to save it, 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 when you reboot, all you have to do is just launch tmux, and then restore from your resurrected file - another hotkey 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 reopen every single application and put you exactly where you were... But at least all of your sessions and windows and certain applications like Vim can be autostarted as well. So it's a nice one. But yeah, I've been using that one for a couple of years.

Adam Stacoviak:

You know, 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? Like, where's the good primer?" I mentioned I'm becoming a chef, and I've found some really 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 good and our kids love it", and I've been enjoying the process... But I've found some really cool stuff to teach me the first principles of cooking. \[00:50:08.00\] Not just how to make a meal, but how do you sharpen your knives? What are the best ways to dice? What are the ways you should do different cheeses? How to do garlic, and pull it off the clove, and like make it a garlic clove that you can actually begin to slice, dice, mash, whatever. I'd like to have the same kind of idea for tmux. 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." 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 killing it.

Jerod Santo:

Nick, surely you have a video about the fundamentals of tmux, or something like that, right?

Nick Janetakis:

I don't have at like the exact fundamentals, like sharpening your knife 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 I kind of demonstrate using the pains and the windows and sessions and Tmux Resurrect, and it's like an eight-minute video or something; it 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.

Adam Stacoviak:

What should I search? Tell me the search. I'll put it in right now.

Nick Janetakis:

Well, that would be cheating. I want you to try.

Adam Stacoviak:

Well, just give me the couple key -- like "getting started with tmux." Boom. Let's see what's there. Wow. Red Hat is first. GitHub tmux tmux is there, the wiki. \[unintelligible 00:51:50.17\] Linux Training Academy, a Hacker News post, Pragmatic Pineapple, Hostinger... Wow, Hostinger's got some content out there on tmux, that's ranking...

Jerod Santo:

Sorry, Nick, you're losing.

Adam Stacoviak:

Let's see...

Nick Janetakis:

I'm losing bad.

Jerod Santo:

\[laughs\]

Adam Stacoviak:

Shane Lee on YouTube... Now, I didn't search YouTube, though. Let me take the same search and apply it to YouTube.

Nick Janetakis:

Well, the funny thing is I don't even actually know the titles of those posts, because they're from so long ago, but...

Adam Stacoviak:

That's okay, because here -- this is probably a great example. So NetworkChuck obviously is first, because he kills it all on 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 scroll, "Dreams of code" is in the scroll...

Jerod Santo:

You're just getting different kinds of slayed here... He was slaying it earlier, and now he's getting slayed.

Adam Stacoviak:

The Primagen is there, Theo is there, Warp.dev is there, Shane Lee is there again... Where is Nick? Nick, oh, where are you, on your own hardware...?

Jerod Santo:

\[laughs\]

Adam Stacoviak:

Gosh... I do not see Nick in the initial page scroll.

Nick Janetakis:

Okay. I think I discovered why... Because I'm looking at this post now, and the title is so -- this is a great aside on just how important naming your titles are... Because my title is "Using tmux sessions, windows, panes and vim buffers together."

Jerod Santo:

Yeah, that's pretty specific on...

Nick Janetakis:

But the Adams of the world aren't searching to be like "Oh, how do I use a window and a pane?" It's like, you don't even know what those terms might be if you're just getting started.

Jerod Santo:

Right.

Adam Stacoviak:

"Teach me tmux. Getting started with tmux. Tmux for beginners. Why should I use tmux?" All those tmux phrases... Yeah, I agree, you have to think -- this is part of user experience, though. This is part of product development. This the problem of all products, it's 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. You're doing that great. No problem. Good job. But you have to title and think like -- and Jerod and I maybe don't do this very well. Right? Do we do this very well?

Jerod Santo:

\[00:53:56.27\] No...

Adam Stacoviak:

We're not a great example of titling well. We enjoy our titles. This is for the love of titling.

Jerod Santo:

Yeah, we don't title for that purpose, which is why no one finds us. \[laughs\] No one finds us for other reasons, Nick, but we're okay with that, I guess.

Nick Janetakis:

So I've found another post from 2017, which is -- this is more of a getting started guide. Like, it walks you through the basics, 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.

Jerod Santo:

Right. Boost your terminal productivity...

Adam Stacoviak:

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 optimize your YouTube. But my assumption is if you can go back and revisit -- 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.

Jerod Santo:

No meandering? We're an hour in and we haven't talked TUIs yet. \[laughs\]

Adam Stacoviak:

Yeah. Well, let's talk about a TUI!

Jerod Santo:

Oh, love it...

Adam Stacoviak:

I've got one open right now.

Jerod Santo:

Alright, let's hear it.

Adam Stacoviak:

So Nick, on your list you had htop, which - I'm a fan of htop. And Jerod, I think we had the prior core committer of htop on the show...

Jerod Santo:

Probably.

Adam Stacoviak:

...way back in the day, when they got -- yeah. I have here in front of me Bash top Bashtop.

Jerod Santo:

Bashtop.

Adam Stacoviak:

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 at least my process is this. And your mileage may vary wherever you're at. But on Ubuntu you add the apt repository via this thing, I believe it's called PPA. That stands for -- Nick, help me out here... Personal Package Archive. And essentially, you're adding bashtop-monitor/bashtop as an apt repository. So you can apt-update, and just do sudo apt install bashtop. And then it installs things like lib sensors, Python 3 utilities if you don't have them in there, \[unintelligible 00:56:15.00\] and a couple others... And then once you get it there, you just simply type bashtop, 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, and 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, 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.

Nick Janetakis:

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. On my really, really nice work machine now, if I want to see if my CPU cores are pegged - all four of them, by the way - 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 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 tmux and everything, but like an htop, it didn't even ever cross my mind once to like jump into its config to tweak it out... Just because usually I'm going in a very specific thing, and then like exiting out 20 seconds later.

Adam Stacoviak:

\[00:57:45.22\] Well, let me explain to you... So I like to, I guess, the one thing I do that makes me pay attention to those, I guess, metrics more so than anybody else is I wanted to monitor my Plexbox 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 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 was kind of fun to watch. It's just kind of fun, like you're really pushing this beefy machine... And dang it, I want to see what's going on here. I want to htop up in there. Or in my new case, bashtop. And so the one thing I do specifically on these kinds of boxes is I want to have my CPU stacked, I want to have them organized, I want to have my hostname there, I wanna 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 DiskIO 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 every time I've got to instantiate a new machine with new Htop, it's not like one config that I can 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 system to system, I tried to see if 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 do 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.

Nick Janetakis:

That makes sense. And it's a great aside too, just around being really engulfed in your environment. 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 whatever. Whereas me with Htop - you know, I am still running Windows with WsL, but I would just probably just open Windows' Task Manager to see that information... Whereas for you, 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.

Adam Stacoviak:

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.

Jerod Santo:

Well, I was just reading about Btop++.

Adam Stacoviak:

Oh, nice.

Jerod Santo:

Have you heard of this?

Adam Stacoviak:

No.

Nick Janetakis:

No.

Adam Stacoviak:

Do they like to increment, like us?

Jerod Santo:

Yeah, I mean, I assume it's better, because that's what the Plus Plus means.

Adam Stacoviak:

It is better.

Jerod Santo:

It is better. 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, but it's 94% shell script, which I assume is Bash.

Adam Stacoviak:

It must be tough to maintain.

Jerod Santo:

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 notice about the GitHubs 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++. So maybe give that one a look.

Adam Stacoviak:

So I saw a release -- I thought I saw a release on Bashtop that made me think "Okay, this is kind of cool." I'm now not seeing it. There are no releases for it. Dang it...

Jerod Santo:

\[01:01:54.08\] It's alright.

Adam Stacoviak:

This is data software? I'm pimping dated software? What's wrong with me?

Jerod Santo:

Hey, some old software is just good.

Adam Stacoviak:

Okay, fine. You're right.

Jerod Santo:

I mean, how old is tmux...?

Adam Stacoviak:

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 the software and see if they --

Jerod Santo:

The human, the actual human that's writing your software for you and giving it to you as a gift?

Adam Stacoviak:

That's right...

Jerod Santo:

\[laughs\]

Adam Stacoviak:

This free USB stick at the front of their lawn, I just -- I'll just run by and steal it. Yet it's free.

Jerod Santo:

Right.

Adam Stacoviak:

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/author of the software, have they moved on?

Jerod Santo:

Which it seems like they've moved on.

Adam Stacoviak:

Oh, man...

Jerod Santo:

That's alright.

Adam Stacoviak:

So I should be using Btop++.

Jerod Santo:

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 the big rewrite - sometimes it takes a while to come up to feature parity; it may actually be worse for a while, 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 and let's talk to him about it.

Adam Stacoviak:

So it seems like /btop is now just Btop++. Did they just change it then?

Jerod Santo:

This I don't know.

Adam Stacoviak:

Okay. So the same --

Jerod Santo:

I've been doing my research while you've been talking, so I'm very shallow at this point.

Adam Stacoviak:

Gotcha.

Jerod Santo:

You actually reached the end of my knowledge.

Adam Stacoviak:

The person's name is Jacob. I don't know how to say your last name. We're gonna reach out.

Jerod Santo:

There you go.

Nick Janetakis:

It is interesting how fast developers will just like throw away a project they love, just because it hasn't been touched in like 11 seconds...

Jerod Santo:

Right. Adams's like "You know what? Bashtop sucks." \[laughter\]

Adam Stacoviak:

Well, maybe Btop has the same principles, right?

Jerod Santo:

Well, it's literally the same person, so I assume it's the successor to the tool you already love... And so check it out.

Adam Stacoviak:

And nobody wants to buy last year's product at the New Year -- this product for this year's...

Jerod Santo:

Nick does. I mean, his PC is 10 years old, man.

Adam Stacoviak:

That's true. Gosh...

Jerod Santo:

\[laughs\]

Adam Stacoviak:

Alright, Nick, school us on going old. Staying old. Legacy.

Nick Janetakis:

There we go. It's actually funny, we're now however long it's been on the whole entire show, but have we even defined what makes something a TUI, versus just a regular command line tool?

Adam Stacoviak:

Great job, Nick. You should be a podcaster. Tell us.

Nick Janetakis:

Maybe. One day.

Adam Stacoviak:

Do you have a definition? Do you have an idea? Do you want to hypothesize?

Nick Janetakis:

Well, okay. Let's go zero research, top of my head. I mean, I would say a tool like grep, sed, cut etc. - this is a command line tool typically that you'd run. You provide it some inputs, it will provide some outputs. And the output that you get on your screen - it's almost like a transaction. Almost like an HTTP request. 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 if you're dealing with an image manipulation tool. It doesn't need to be text. But a TUI, to me at least, it's like something that's just running. Like Htop; it's just running, and you can interact with it. You're still sending it inputs, you're still getting outputs, but you're kind of getting these little incremental updates on the screen somewhere, like in your case a CPU graph, or something like that... So yeah, I don't know, in a weird way if you're gonna follow that HTTP analogy or something, it's almost like a WebSocket connection, where that connection is staying open and then it's like broadcasting things back and forth. Or, you know, one way works as well. But I don't know, do you guys have like a different definition of that?

Adam Stacoviak:

Mine is slightly more simple. I would say I think a TUI 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 or utilities where you're sort of passing things around on the command line - they're not meant to be TUIs. What does TUI stand for, Jerod, again?

Jerod Santo:

Text-based User Interface.

Adam Stacoviak:

There you go. I thought so. Not terminal user interface...

Jerod Santo:

Not necessarily.

Adam Stacoviak:

...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 Bashtop, or a Btop, or an Htop, 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 READMEs, or an editor... VIM is kind like a TUI. It's kind of like an application.

Jerod Santo:

For sure.

Adam Stacoviak:

Right? It's kind of a TUI.

Jerod Santo:

\[01:06:08.14\] For sure. Well, if you run it in the terminal.

Adam Stacoviak:

Where else would you run it?

Jerod Santo:

There's VIM GUIs...

Adam Stacoviak:

I don't know about those.

Jerod Santo:

In fact, Kris Brandow 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 "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 TUI. Wouldn't it, Nick?

Nick Janetakis:

Yeah, I would agree with that.

Jerod Santo:

So yeah, I think Nick's on point, and I think Adam' on point. I think the point is statelessness versus statefulness.

Adam Stacoviak:

Nic's was more scientific though. He was like a scholar laying out there what TUIs are.

Jerod Santo:

Just off the top of his head. He's just scholarly.

Adam Stacoviak:

Yeah.

Jerod Santo:

Well, he was 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 a utility, as you called 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... Maybe it outputs nothing, as it should, if everything goes correctly, and it has no output. Whereas a TUI has state. You launch it, it goes through time... \[laughs\] Things change on it as it runs, and then you exit it. And so I think that's pretty much the difference.

Adam Stacoviak:

I would probably say they're themeable as well. I mean, there's an interface that you care about.

Jerod Santo:

Themeable I think is a feature that you would want in a TUI, but not necessarily...

Adam Stacoviak:

A desirable feature, I would say... For me, at least. I want a theme everything Dracula; if it's not Dracula, just throw it in the trash.

Jerod Santo:

Let me introduce you to a new text-based user interface 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, so it's a Python tool... You can pipx-install it like I did... And it's very much like a Postman insofar as you have like collections, and you can create \[unintelligible 01:08:30.01\] 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 wanted to introduce it to you, Adam, is because this sucker is themeable. In fact, if you launch it, it's beautiful to start. But you can also hit Ctrl+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 black... Guys, this thing is awesome.

Adam Stacoviak:

It's chasing my heart here.

Nick Janetakis:

I've gotta say, I'm just glancing the readme file on GitHub now, and there's quite a few screenshots with different themes... Yeah, this looks pretty slick.

Jerod Santo:

It's very high-quality, in my opinion. You've got different built-in panes for different sections, like the request, the response, a collection of 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 on different tabs... And so it's aware of the mouse, but also keyboard-driven. \[01:09:54.07\] I wonder - this could be a question probably for Will McGugan and for the author of this, whose name is Darren Burns... 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 it's just keyboard commands, or it doesn't really have all of the things figured out. The tab situation is correct. You can tab through the different areas, as you would on a webform... And it just works in the way you'd expect it to. It's very easy to manipulate... So I'm just highly impressed by this one in particular.

Nick Janetakis:

Very nice. Yeah, I may have to check this one out. It's actually interesting, though - this could be maybe a hot take on TUIs in general... So I really don't use too many of them; like, sure, if you want to classify Vim as a TUI, and FZF once in a while... But I know there's TUIs - and maybe we'll get into this in a little bit - for Git, and there's one for Kubernetes as well, like k9s... It's just, my use cases just don't really go after using tools like that. Because usually, I just want to run a one-off command, get some output, move on.

Jerod Santo:

Do you use GUIs?

Nick Janetakis:

Yes, for certain things, definitely. Like if I'm editing a spreadsheet, or something, I prefer that, a GUI.

Jerod Santo:

Would you consider a TUI for that?

Nick Janetakis:

If you can find me a good spreadsheet viewer TUI, then I shall.

Jerod Santo:

Hold on, let me go back to the Awesome TUIs repo and see if I can just search for the word spreadsheet, or Excel... Hmm... Scim, an ncurses spreadsheet program for the terminal. Can we get you to try that one out?

Nick Janetakis:

I'll give it a shot.

Jerod Santo:

Or Vizidata. Actually, Vizidata is awesome. Have you tried to Vizidata?

Nick Janetakis:

No.

Jerod Santo:

That is more of a visualization tool,s o it's not going to be like a one-for-one replacement for Google Docs, or Excel, or with numbers.

Nick Janetakis:

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 let's say I'm exporting a Stripe CSV dump for 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 a TUI that's gonna be hard to pull off. It would probably be pretty easy to sum a whole column, but what about just rows 6-15 and 30 through 50?

Jerod Santo:

That's why this particular tool is impressing me... And I want to go back and maybe visit more Textualize-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. 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 the terminal again, Nick. I mean, this machine might last you another decade.

Adam Stacoviak:

That's right. \[laughter\]

Nick Janetakis:

I hope so...

Adam Stacoviak:

Another decade... **Break**: \[01:12:54.25\]

Adam Stacoviak:

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 a developer tool. And I don't know if this is sponsoring the show, but I saw PagerDuty mentioned in this list as you were digging into this list further, Jerod; 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 to TUI this thing in Sentry?" And there's nothing in here for Sentry, but I'm thinking like particular dev tools that are Web UI, dashboard-based things, like Sentry or others might be - would it make sense to have a TUI? Because like hackers be hackers... Give me an interface that is just simplified. Not the extras, just the things that matter. Is there a room for a TUI in the world of like a Sentry, or maybe even -- who do we use for analysis, again? Plausible?

Jerod Santo:

Plausible.

Adam Stacoviak:

Yeah, things like that. Could there be a TUI for Plausible, and Sentry, and obviously PagerDuty, or something like that...?

Jerod Santo:

Absolutely.

Adam Stacoviak:

I would welcome that personally, right?

Jerod Santo:

I would.

Nick Janetakis:

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.

Adam Stacoviak:

\[01:18:07.23\] Quick check, too. I don't have to exit my terminal... I can maybe even have a tmux session with it already there.

Jerod Santo:

Exactly.

Adam Stacoviak:

It's already in my world, see?

Jerod Santo:

Now you're thinking...

Adam Stacoviak:

Sentry, you should do this.

Jerod Santo:

I think Plausible should do it, too. I think that's a great example of 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 --

Adam Stacoviak:

Better.

Jerod Santo:

...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 ask yourself questions like "Well, what really matters?" Versus like showing them all the widgets, you know? And so that could be really cool.

Adam Stacoviak:

Yeah. Simplify the UIs is a big deal... And I'd imagine they can probably put a search or a query kind of like bar in that UI to interact with the data too, to some degree. 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, at Google, first name?

Jerod Santo:

Which one?

Adam Stacoviak:

The fella that did Textualize, and Textual.

Jerod Santo:

Will McGugan.

Adam Stacoviak:

Will McGugan. McGoogle... I was thinking about a different friend of ours...

Jerod Santo:

I thought you said "the fella from Google..."

Adam Stacoviak:

I was thinking about McGoogle from that GitHub Universe trip we did. Remember that? That crazy --

Jerod Santo:

Oh, yeah. Yeah.

Adam Stacoviak:

Oh, man. That didn't make it into your highlights video, man. I'm sorry about that. I didn't take any pictures of that trip.

Jerod Santo:

Probably not.

Adam Stacoviak:

But that conversation we had with him I think was pretty interesting. 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 TUIs 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. But realistically, how defined is the interface standard, I suppose, for a TUI? 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, like there is for iOS, for example. Or even like when you're a web designer 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, there is no true standard thus far... Or 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 in UI components, maybe it might be -- maybe that's what Textual does, Rich does. I don't know.

Jerod Santo:

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. It's stateful, there's lots of features inside of a TUI, etc. and you're kind of abandoning this idea of like inputs and outputs; everything is text. I've noticed a lot of these tools will have that some sort of alternate output mode, and it's usually JSON... Which makes some sense, because JSON, for most tooling, is 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 sed and cut it to exactly what he wants, but that can be ---

Adam Stacoviak:

\[unintelligible 01:21:40.00\] to slice and dice this JSON...

Jerod Santo:

I know, he's actually -- I can see his eyes moving. In his head he's like sedding, 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 output in JSON, especially if they have a stateful UI, where the regular view is like this Rich client in your terminal, and then will also give you a JSON output. Not necessarily commenting on that, but I'm noticing it as a trend. And so that's kind of going away from the Unix philosophy, right?

Nick Janetakis:

\[01:22:13.10\] Possibly...

Jerod Santo:

And then I think the standardization around inputs and outputs, everything is text, is - it's not a user interface. 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 Textualize one, it probably works differently than the Ratatui one... And so you may have to learn a UI every single time as you adopt these... Which can be a barrier to adoption. Nick, you were gonna say something...

Nick Janetakis:

Yeah, just a little bit. And it's related to that as well. I'm sure you guys remember the old days with like Flash... And trying to build your own Flash application was a little bit challenging, because you kind of just had this white, blank screen, and then you could literally do anything. Whatever you wanted to put on there, within reason, can be done. But with HTML, you have some structure; you have like an h1, and your 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 like. But yeah, it would be interesting to see if some of these more defined, I don't know, terminal UI toolkits come out, or if they're not already there... Like, if that would help spark a little bit more interest in building tools like this.

Adam Stacoviak:

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, Jerod... Because he had some - I would say 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 TUIs... And I think we were like "You just want to take these TUIs to make them websites..." 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/frameworks/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? Like, any place you would want to use a little dashboard, just get a version of it... You know, I know k8s has -- wasn't there a single pane of glass thing that Gerhard had back in the day when we were on Linode?

Jerod Santo:

K9s.

Adam Stacoviak:

Yeah, k9s. There's all that, for all these different applications. Docker has versions of them, I'm sure... Right, Nick? There's all these things out there for Docker that you can see like "Okay, here's all my containers running, here's the CPU usage of each of them, and 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.

Nick Janetakis:

Yeah, for sure. It's actually another interesting segue, like - what's the difference between a CLI tool that's not a TUI, versus one that is? Docker is a great example. There's a Docker stats command that you can run, and that will just list out all your running containers, and give you the outputs of like the CPU, memory, disk and network... Just little stats about those things. And there is this medium ground, I guess, between a CLI and a TUI for output. Have you guys ever used like the watch commands? And some commands just support --watch, Kubernetes as well. It'll just watch a program and will let you know when the outputs are changing. So it's like Docker Stats almost feels like it's just doing that. It's not quite a TUI, but yeah, there are other tools dedicated --

Adam Stacoviak:

It's a PUI, actually. It's a plane UI.

Nick Janetakis:

Yeah. But going back to what Adam said before, around his definition of TUIs being more application-like, and going back to like the Unix philosophy... I do think, to some degree -- like, when you're using an application, there are certain characteristics of the Unix philosophy that you almost don't care about. If you add a TUI to have like an mp3 player, it's like you want to open that program, find the mp3 that you want, maybe there's some bouncing lines over the EQ, or something; 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. \[01:26:21.15\] But I guess technically... I mean, Adam - and Jerod, you mentioned this with like JSON output; do some of these TUIs also offer flags or ways to run them, to where if you wanted to get that metadata back, you can get that back in text form, and now it's 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.

Jerod Santo:

Yeah, absolutely. Obviously, it's app by app... An mp3 player - like, what kind of output would you want from that, necessarily? Maybe like your list o 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. 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. And your -- well, that'd be two panes. 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 moves up and down. Anyways, that's a small gripe, but...

Adam Stacoviak:

It's a good gripe \[unintelligible 01:27:41.01\]

Jerod Santo:

\[unintelligible 01:27:41.04\] "What are you thinking, man? Come on, everywhere, the spacebar is a play/pause, or a quick look." And so when you launch it, you're like "I've gotta 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, 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. I could see that as an alternate way to run the program, and get some output that would make sense to pipe somewhere else. But yeah, it's contextual. I think some of them makes total sense. A tool like \[unintelligible 01:28:15.02\] which its entire point is to do like HTTP requests and bring you back the information after running - I could 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 like integration tests... And you could maybe take that collection, save it as YAML, and then you could 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, or... You know what I'm saying.

Adam Stacoviak:

I like the idea of the TUI/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 had 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... I don't know, do some cool stuff in the TUI. But at the same time you still have the traditional Tailscale CLI, or even in the same case here with \[unintelligible 01:29:26.12\] It's like, the application is just one more way you enjoy the CLI, the command line interface that is there. It's just a visual version of it built probably on top of it, with Textualize, or Textual, 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. \[01:29:51.27\] Let me ask you one question here, Nick, 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, there'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 type in "docker stats" on this Plexbox, which literally is only a single Ubuntu box dedicated to running Docker, to run a single Docker container, which is 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 real time... The CPU is at 66 point whatever. But then - because I 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 Docker Stat seeing such a high CPU usage and it's not?

Nick Janetakis:

Yeah. I mean, Docker Stats 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. It's not like a magic CPU that's just going to exist. So that CPU load should have carried over. I mean, I'd have to look at your setup a little more in detail. I mean, when you run any Docker command, you're connecting against wherever you have Docker running, right?

Adam Stacoviak:

Well, I can tell you in Htop the average CPU usage right now is four point something... Whereas in the Docker stats, real time update, it says 64%. I was just wondering, maybe it's a Docker thing. Maybe this image is allocated a certain percentage of the CPU, and of that slice that it's been given there's a high degree of usage being used. I wasn't really sure. Anyways, that's not what this show is about... I was just kind of curious.

Nick Janetakis:

That is a possibility, too. You'd have to look at the command that was run... Because there is a way to set CPU and memory limits on a container.

Adam Stacoviak:

Okay. I'll let you know more about that. Do you have a video about that?

Nick Janetakis:

Actually, no. So I'm gonna put that in my drafts.

Adam Stacoviak:

Put in your drafts, man. And when you post it, tell me, and I'll help you title it.

Nick Janetakis:

Yeah. I was gonna say, maybe I'll put Adam in the title, so he finds it...

Adam Stacoviak:

\[laughs\] I'm not searching for myself out there. "Help Adam with Docker." And then all the results come back. There you go. What can we do to get more people to do these TUIs, Jerod? That's what I want to know. Can we just keep doing podcasts about it every other year or so?

Jerod Santo:

Yes. Just constantly.

Adam Stacoviak:

That's it?

Jerod Santo:

Just do a watch, 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?

Nick Janetakis:

So I think it might be a second or two by default, but there is a flag to -- you can set the interval. And then it'll just like output new changes and let you know when it changed. There's a little timestamp that happens.

Jerod Santo:

Yeah. I've used it in the past, and I know Gerhard used 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 lik, what is a user interface if not some sort of event loop 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.

Adam Stacoviak:

Yeah. That demo he gave us was the bomb. Did that make it to YouTube yet?

Jerod Santo:

It's in the Drafts folder. It's going to hit YouTube. This was our recent Kaizen, Nick. Gerhard demoed a pipe dream of mine, and he did a really good job. He actually had an entire scripted user interface... I mean, I actually don't know how he put it together. It was a script, but it had a lot of --

Adam Stacoviak:

It was magical.

Jerod Santo:

- head colors, it had state... I think it was 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 know Gerhard, he probably used Dagger. Well, you were talking about watching Docker Stats... Have you seen this lazy Docker one? I know this was in the list...

Adam Stacoviak:

It's in my list. I did not try it yet, but it's on my list to do.

Jerod Santo:

\[01:34:00.15\] 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 in the readme. And it looks a lot like your Docker stats there, Nick, except for it's interactive, 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 you'd be interested in using, or 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.

Nick Janetakis:

I mean, I guess it would be "When would I use it?" What would be the use case that I would be like "Okay, now I've gotta use this." Because I do know -- for example, the other month I was doing a Kubernetes update, 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, and you need to join the cluster... And there's a whole sequence of events that happen. And in that case - yeah, I just use Kubernetes' watch flag on the nodes list, so I can see these new nodes coming up, when are they being drained, when are they ready, and stuff like that... So it's like little one-offs like that. I don't know, watch goes pretty far, but here... Yeah, I don't know. I'd be curious, do either of you have a use case in mind where you would use this tool?

Jerod Santo:

I don't use Docker.

Nick Janetakis:

Okay.

Jerod Santo:

\[laughs\]

Nick Janetakis:

You took the easy way out.

Adam Stacoviak:

He's hardcore against Docker.

Jerod Santo:

I just don't like it very much.

Adam Stacoviak:

I have one machine that I have more than one Docker container running on, and it's the one machine that does home assistant, and other automation stuff... And 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 in Docker. And I think in those cases, I would want something like that, because then you have maybe 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 Btop++, or Bashtop for Docker, essentially. You're seeing your services, the containers that are running, the images they're using, configs, 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 to command this world. To have a single box for all these services.

Nick Janetakis:

Yeah. It is nice, because I mean, 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's like that same information on the command line. So it is nice.

Adam Stacoviak:

Well, you need that for a headless machine. So in this case I'm SSH-ing into it. You need a TUI. And that's actually a good example of 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? Get a TUI.

Nick Janetakis:

And. And. Here's the biggest pitch ever to use Lazy Docker... It looks like DHH is a sponsor. So his avatar's on there on the readme file.

Jerod Santo:

\[laughs\] Well, let me give you the actual pitch, because Jesse has taken a moment to write an elevator pitch... And I'm gonna read this to you, Nick, and you tell me if he sells you or not. He says "Minor rant incoming. Something's not working? Maybe a service is down. Docker Compose PS. Yup, it's that microservice, it's still buggy. No issue. I'll just restart it. Docker compose restart. Okay, now let's try again. Oh, wait, the issue is still there. Docker compose ps. Right. So the service must have just stopped immediately after starting. I probably would have known if I was reading a 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 --follow microservice. But that dies every time the service dies, so I need to run that command every time I restart the service. \[01:38:03.03\] I could alternatively run docker 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." It sounds like an infomercial. "It's such a pain...!"

Adam Stacoviak:

But wait, there's more.

Jerod Santo:

Yeah. "I guess when I want to reclaim the terminal real estate, I can do CTRL+P+Q... But wait, that's not working, for some reason. Should I use Ctrl+C instead? I can't remember if that closes the foreground process or it kills the actual service. What a headache!" This is an 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, with every common command living one keypress away, and the ability to add custom commands as well? Lazy Docker's goal is to make that dream a reality."

Nick Janetakis:

It sounds like Jesse needs to start using tmux. Then his terminal problems go away. \[laughter\]

Jerod Santo:

This is true. This is true.

Nick Janetakis:

No, but seriously, I will say, I tried not to read it along. I was just listening to you... And 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." Like, those were things going in my mind, so I think he did a great job just demonstrating the usefulness of it.

Jerod Santo:

Yeah. Like, you literally do those things... And it works for you. And he obviously knows how to do those things as well. It has a pretty good elevator pitch. But there's something about knowing 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, tmux does solve a few of these problems.

Nick Janetakis:

I feel like you're indirectly telling me to like upgrade my computer already, because all the pain I'm experiencing.

Jerod Santo:

\[laughs\] Well, I told you that directly about an hour ago, so I wouldn't need to be so coy.

Nick Janetakis:

Yeah. But if you had a production server, and 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 be like up arrow, enter, Ctrl+C, switch the tab, do this thing... If I can just look at a screen and monitor to that stuff, that is a win. That is a quality of life improvement.

Jerod Santo:

Right. Alright, so we're selling it here, Adam. We're getting them over to our side, the TUI world.

Adam Stacoviak:

Slowly, but surely.

Nick Janetakis:

I've moved to about 10% now. At the start of the show I was at like two.

Jerod Santo:

Resistance is futile. All will be assimilated.

Nick Janetakis:

By the way, earlier you mentioned that, Adam, you wanted to get a little bit more interest in folks contributing towards the TUI ecosystem of things... And I think you guys joked around about starting a podcast around that. But you guys do have Ship It, so I think you need to start like "TUI It."

Jerod Santo:

Hm... TUI It.

Adam Stacoviak:

Well, that's not our game, man.

Jerod Santo:

\[laughs\]

Adam Stacoviak:

I like your ideas, but that's not our game.

Jerod Santo:

What's our game?

Adam Stacoviak:

I don't know, I would actually really encourage Will to do that kind of podcast. Because Jerod and I are not the epicenter of that. I think we would welcome him on the show, 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 to the masses, but not be the... Like, I suppose if I had TUI Inc, and I was trying to build the next big thing on top of TUIs, and 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 TUIs. The main thing is, I would suppose, 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.

Nick Janetakis:

Okay.

Jerod Santo:

What would you name said podcast? I mean, obviously you said "TUI It", but I think that's a terrible name myself, no offense.

Adam Stacoviak:

"TUI up."

Jerod Santo:

"TUI up"?

Adam Stacoviak:

\[01:41:51.26\] Yeah.

Jerod Santo:

A little better.

Adam Stacoviak:

Not "TUI Down..."

Jerod Santo:

What about "TUI for You-i"? \[laughs\]

Adam Stacoviak:

I bet you tui.fm is available... I mean, just to keep it super-short URL.

Jerod Santo:

Yeah, that'd be cool. TUI.fm.

Adam Stacoviak:

Or tuiftw.fm. That'd be a good company name, TUI for the Win.

Jerod Santo:

Careful, Nick... If we land on a good name here, Adam's gonna completely change from --

Adam Stacoviak:

"Okay, we're doing this...!"

Jerod Santo:

..."Not our game" to "This is totally our game. We need to make this podcast."

Adam Stacoviak:

Oh, my gosh...

Jerod Santo:

So we'll stop there. Stop with a really bad name, like "TUI for You-i."

Nick Janetakis:

Yeah. You've won the worst name possible.

Jerod Santo:

Yeah, I did. I beat you on "TUI It."

Adam Stacoviak:

Well, I think TUIs are fun. I think I would summarize it -- I don't know how much more deep we want to go, but I think --

Jerod Santo:

I think we're plenty deep.

Adam Stacoviak:

...there is a place for more TUIs out there. I do enjoy a good TUI. And if it was a sandwich or a meal of sorts, like a TUI sandwich... Nom, nom, nom. All day long. Give it to me.

Jerod Santo:

Is this a Spanglish callback?

Nick Janetakis:

If it were a sandwich or some food, what would it actually taste like? How would you describe TUI as a taste?

Adam Stacoviak:

Bright. Flavorful. Lots of flavor. Scrumptious. Yummy. Give me, give me, give me.

Jerod Santo:

I'm not gonna wade into that pool. We're gonna let that Adam have the final say on that. Alright, Nick, anything else you want to say about this or any topic before we let you go?

Nick Janetakis:

No, I think this was a really fun episode. I learned some new things. I may need to explore TUIs in a little bit more detail.

Adam Stacoviak:

There is one thing I want to say before we go. Can I say one more thing? I think this is worth sharing this... 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 it via Npm, you're doing it wrong. Can we do an unpopular opinion of that? That's a popular opinion. I'm terrible at unpopular opinions.

Nick Janetakis:

I am so with you on that one. If I have to install Node to install your tool... And it's nothing against Node. This could happen to Ruby, or whatever. It's the same thing. I'd much prefer either -- give me a binary I can just curl down and run it... Or if you have a built-in package manager support for my ls, that's nice, too.

Adam Stacoviak:

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 do the add apt repository and the PPA version of it, and then literally update apt and then install the Bashtop 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. I want to have a native way to install it from my system.

Nick Janetakis:

Yeah. I think a great point around that one too is just adoptability or adoptability of a tool at maybe like an organization. Because right now the place I work at, we've got 15 developers, and we're allowed to have macOS, we can have native Linux, we can have Windows with WsL... 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, it is nice to have a way, like go to GitHub release pages for the project and just download that binary for that CPU architecture, that base operating system, and then that will just work. And there's little variables, like you can run the command line to get those programmatically. So you have one command to run for any system that it's going to be installed on; no external dependencies, or if conditions, or whatever. I think that goes a reasonably long ways.

Adam Stacoviak:

Yeah. I'd definitely want to pay attention to the install process. I would say installation and initial usage to me is key for any TUI. It might seem obvious. Just simply type in Bashtop, 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, give me that Apt flavor. If it's a binary and you want me to pipe it into Bash, I'm cool with that, too. \[01:46:09.12\] 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, what's the very first next step to enjoying the tool? What's the config like? What's the setup like? And I think for any TUI, that's just how you document it, how you get people into it.

Nick Janetakis:

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, Adam; would it help -- let's say that the tool is just 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 day one, I think that goes kind of a long ways.

Adam Stacoviak:

That'd be kind of interesting, actually, 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 install, my machine; keep it vanilla, keep it pristine. Because even like on a VM, before I do some of this stuff, I will backup 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. But that's a pretty good assumption of most developer machines these days, aside from Jerod's. He's just like "Don't even touch my machine with D-O-C-K-E-R. Get it out of here.! No Docker here. It's just too slow."

Jerod Santo:

I have Docker installed...

Adam Stacoviak:

Oh, you do have it installed? Okay. Nevermind.

Jerod Santo:

I just don't want to. But I have to, because I'm a developer. And sometimes you just need it.

Nick Janetakis:

Some Docker 1, basically.

Jerod Santo:

Yeah, they won. They won big time.

Adam Stacoviak:

But I'm with you... If you had a Docker image, and it'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, it'd probably be good for mileage for potentially even a dev setup to maybe more easily contribute... It can be a dual-facing use case for using Docker in that case, like a demo, as well as maybe contribution.

Nick Janetakis:

Yeah. Actually, I love that. That's another angle. That's really important. The more people that can contribute towards the project... Even just like opening up a PR to do some small patch... Yeah, if all you have to do is just run a container, and that's it...

Adam Stacoviak:

Absolutely.

Nick Janetakis:

Sign me up.

Adam Stacoviak:

Yeah, I love that idea a lot, honestly. If I could just docker compose up anything, I'll do it. You just send me a command. Anything whatsoever. I'll just do it. I'll tell you in this show, Jerod.

Jerod Santo:

Just do it.

Adam Stacoviak:

Just do it.

Jerod Santo:

Send Adam a command. Anything. And he'll just do it.

Adam Stacoviak:

That's right. That prefaces with docker compose, and I'll do that.

Jerod Santo:

\[laughs\] Alright. Well, Nick, always good to catch up. I think we should do more shows like these with you, because it's always fun.

Nick Janetakis:

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 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 wav is being output, we're still pretty efficient.

Adam Stacoviak:

Wow. Wow. Even on that old hardware. You're doing good.

Jerod Santo:

We can keep going then.

Nick Janetakis:

Yeah.

Jerod Santo:

We're just nine hours away from denial of servicing them.

Adam Stacoviak:

That's right. That's right.

Jerod Santo:

\[laughs\] That's a slow motion DoS. No, go ahead.

Nick Janetakis:

But I was gonna say - yeah, thanks again for the invite, and happy to come on whenever you want.

Jerod Santo:

Awesome.

Adam Stacoviak:

Well, you're a friend. You're welcome here anytime.

Jerod Santo:

That's right.

Adam Stacoviak:

Bye, friends.

Jerod Santo:

Alright. Bye, friends. **Outro**: \[01:49:38.14\]

Nick Janetakis:

Actually, this a quick closing remark that's maybe interesting, around good stuff for free. So when I was actually traveling around Portugal, I was on the top of some castle, I think it was St. 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. And that is one of my favorite shirts, honestly. I wear it kind of frequently... And this guy was just like "Cool shirt." And I was like "Thank you." And he's like "I'm familiar with the show. I've watched so many different episodes." He knows who both of you are, and...

Adam Stacoviak:

Get outta here...

Jerod Santo:

Ain't that weird?

Nick Janetakis:

No, it was really cool.

Jerod Santo:

On a castle in Portugal?

Nick Janetakis:

Yeah.

Jerod Santo:

That's a small world, I guess...

Nick Janetakis:

But it made me think... The only reason I accepted your invite to go on the show was to potentially get another awesome, high-quality free shirt... \[laughter\]

Adam Stacoviak:

The only reason... Well, now you're not getting one.

Jerod Santo:

Yeah, now \[unintelligible 01:51:56.05\]

Adam Stacoviak:

We're gonna set the flag to no coupon code.

Jerod Santo:

To not send them the coupon code, yeah.

Adam Stacoviak:

That's right.

Jerod Santo:

Just to spite you.

Nick Janetakis:

You can adjust the price so it's actually twice expensive, so I can't get it.

Adam Stacoviak:

The function is called "has one or not", and you already have one, so you get not.

Jerod Santo:

No the toggle is like "Has he spited us?" And you've just spited us, so...

Nick Janetakis:

Oh, man...

Jerod Santo:

\[laughs\] Ultimate backfires...

Nick Janetakis:

But seriously, do you guys have a different inventory of shirts? Or is it the same?

Adam Stacoviak:

Well, it depends on which one you got. Do you have the OG?

Nick Janetakis:

I don't know if it's OG, but it has the globe and it says Changelog.

Adam Stacoviak:

Same one, yeah. We haven't changed --

Jerod Santo:

Same one. But you can get a JS Party, maybe... Or you can get yourself a Kaizen shirt...

Adam Stacoviak:

Or a Tailscale T-shirt...

Jerod Santo:

We don't sell Tailscale's --

Adam Stacoviak:

I'm just kidding. That's what I'm wearing.

Jerod Santo:

Adam will send you the Tailscale off his back. Yeah, so you could get a Practical AI -- so you don't have to get the Changelog one, so you'd have two. You can get a different version. You can get a Kaizen...

Adam Stacoviak:

There's a few more Kaizens out there.

Jerod Santo:

Watever you like, man. Hook yourself up.

Adam Stacoviak:

You have to have the special link to get the Kaizen.

Nick Janetakis:

Cool. I was trying to give you guys a free plug on your awesome shirts.

Jerod Santo:

No, I loved it. And we're just messing with you.

Adam Stacoviak:

Yeah, that's so cool, though. Honestly, to rewind, you can 100% have another T-shirt.