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