Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
This is episode 334, recorded May 3rd, 2023.
I'm Michael Kennedy.
And I'm Brian Ecken.
This episode is brought to you this time by us.
Support our work through our courses over at Talk Python Training.
Check out Brian's pytest course.
Check out a lot of the other courses I did there.
Check out the Test and Code podcasts.
And we have Patreon supporters as well.
Link on the episode pages on the website.
Connect with us over on Fauceton, at M. Kennedy, at Brian Okken, at Python Bytes over there.
And if you're not part of the YouTube live stream and you want to be, we generally do this on Tuesdays at 11 Pacific time in the morning.
But today we had to move it.
So plus one, plus 23 hours.
Yep.
All right.
Yeah, Brian.
Sometimes life happens.
Life does happen.
And sometimes PyCons happen.
Yeah.
Yeah, that was a lot of fun to see you there.
It was a blast.
Did you, I guess, I had a great time.
How about you?
You got a lot of work done.
I got a lot of recording done.
I'm looking forward to releasing some of those episodes.
Met a bunch of great people.
Saw some old friends.
Got to hang out with you.
You brought the Python staff of power and battled the snake, which was the episode album art from last time, which was a lot of fun.
So yeah, it's starting to come back, isn't it?
I mean, but still quite as many people or as vendors, but it's good to see it coming back to life.
Yeah.
I really enjoyed it.
So should we kick in?
Let's do it.
Yeah.
Jump in.
Well, I was actually talking with one of our friends from PyCon that I'm blanking right now.
So somebody from PyCon.
So thank you.
And apologies for forgetting your name right now.
What I came across actually from several people mentioned Rai because we had talked about Hwak.
I think Hwak.
Anyway, H-U-A-K.
And I think I got corrected that the intended pronunciation is Hwak.
I think.
Anyway.
I'm on board with that.
Let's do it.
So a similar, so that's what it is.
It was, was a Rust-based Python project workflow tool.
So now we have another one.
This one's called Rai.
And I don't know what came first, but actually this doesn't look that old.
This is from Armin Roeniker.
Roenicher?
Roeniker.
I'm okay.
I got to practice this stuff.
The dude from Flask that started Flask.
So I was curious about it because he usually kind of knows what he's doing.
And this is a really pretty interesting project.
So I tried it out this morning.
Rai, it says it's Armin's personal one-stop shop for all of his Python needs.
So that, and there's a video, which I didn't watch, but it's a nine-minute intro video.
So what, what, what, what am I excited about with this?
So it's, it's, it's more than just project.toml workflow tools.
It does that.
So you can do things like initializing a project, adding a dependency, removing, you can, you
can remove a dependency.
That's kind of a neat trick.
And then build a wheel and even add lock files, which is kind of nice.
The, so the other thing that, one of the things that I thought was really kind of cool is it
also manages, I'm not going to find all the details here, but it manages Python.
So you can, what, what are people using for PyEnv or something to install Python?
To install Python.
This installs Python also.
So you can say, you can say what, Rai fetch and then give it like 3.9 and it'll, it'll download
and install Python 3.9 for you, which like, wow, that's kind of cool.
And it, it does it in an interesting way.
So it uses these Indiegreg Python build standalone releases, which I was not familiar with.
But so there's these, these different standalone distributions builds of Python.
So neat.
I forgot to add, this is not a windows thing yet.
It's just Linux and macOS.
So I tried it on Mac.
So installing a bunch of stuff, but where does it install it?
It doesn't install it in the normal place.
It installs it in, in your home directory under dot Rai, Rye.
And that, that was surprising to me at first, but it's kind of neat that everything's there.
So, okay.
So it does PyEnv sort of stuff.
It can install Pythons for you, which is kind of cool with a command line.
You can install a Python.
And it's pretty fast.
It also handles virtual environments.
So you can do things like add, run, run within your virtual environment.
You can run a command without actually going into it.
You can say like Rai run black and it'll run black on your project.
You can say sync and it'll take all of the dependencies in your project.toml and install them in your virtual environment.
That's kind of neat.
And also it's kind of like PipX also.
So you can do things like install a global tool, like, you know, PipX install cards or PipX install really whatever you want.
Or black, for instance, if you wanted to.
If you're going to like have any global tools on, on your, you know, on your machine.
It confused me at first because I tried it and I couldn't get it in the thing to run.
But it doesn't really, it doesn't, it isn't invasive.
So it's not modifying your .zhrc or your RC files itself.
You have to do that.
So it's all going into a home directory .ri.
And then I think there's a, there's a bin directory in there or something like that, that you just add to your path.
So it's doing that.
The kind of neat thing about that, that all that isolation in the .ri directory is that if you decide you don't like it, you can just, you can just delete it.
And then delete that directory and all that stuff's gone.
So kind of cool.
Yeah.
I do like that it just blow away the directory and it's gone or it's reset, you know, that's pretty cool.
It's also interesting to see that this is not a package or tool within Python, but outside of Python.
Yeah.
Right.
I mean, it does, it says it uses like uses virtual environment and it uses actually uses virtual end, which is a third party package.
That's a little faster than the V and V.
But it also uses a pip, but it doesn't expose any of those.
So it is kind of interesting that it's outside.
I kind of like that it's outside because you can do things like, like pip X and, and pie and V.
And for me, it like just worked better.
I, I've still had trouble getting pie, pie, pie, and V is a cool idea, but it mucks with everything in your environment.
And I don't like that.
Exactly.
Yeah.
I don't like that either.
So, I think the trend I've been talking, you know, we, I did the Python packaging discussion on talk Python a while ago.
And there's, there's been a lot of talk about this, talked, to Ofec about a hatch and it's looking like there's a little more, a little more interest in saying like, okay, what if we had a tool that actually not just manages environments and packages, but actually manages Python.
Python, like it, for example, like this one, like install the version of Python you want and do a bunch of other things along those lines.
So, yeah, it's, it's interesting.
Uh, another, just a side note, Simon Wilson wrote up some notes on his, when he tried Rye.
So we're, we'll link that article as well.
Okay.
Excellent.
All right.
What is next?
PyPI is next.
Okay.
So remarkably, PyPI has 452,000 packages.
That is insane.
But what is more insane is the traffic, right?
So there's some, one of the themes from PyCon this year was about sustainability and kind of building for the future.
Carol Willing gave a great keynote talking about, you know, let's make sure that, we're investing in the front end story for Python, investing in a mobile and deployment story for Python.
And, you know, PyPI and the Python packaging authority, it's kind of there as well, right?
Like as we grow in traffic, we need things like somebody to over watch over the security and some, you know, somebody to make sure all this stuff is developed and polished.
And people have been doing that, but to a large degree in a volunteer way.
Right.
But how does Python pay somebody to work on this?
Well, there's been some grants, I think, I don't want to say the wrong company.
It was from, some of the big tech companies are hiring people to do specifically security work, like a supply chain type of security for PyPI, which is great.
Right.
But those are year by year things.
So what, what could be done?
Well, right now, if I go over here on PyPI and I search for like VotoCore, this is the way to talk to, AWS basically, from Python to a large degree.
Who's it run by?
Oh, it's Garnat amongst others.
Wait a minute.
This is like the official AWS thing.
Shouldn't this somehow be kind of more official than that?
And how do I find the other AWS projects?
I can like email the person or something.
I don't know.
I guess I could go over here and see this, this, the projects if I go to their user account, but it's kind of just, you know, AWS sort of hacked the system by creating an account named AWS.
But it's not really official.
You don't get like a branded, sort of story.
Right.
You just get a, you know, use your profile.
So GitHub has something like this.
Like if you went to GitHub.com slash talk Python, this is the official organization.
We have 47 repositories.
We have six people involved.
And you can sort of see, right?
You can, you can put this together officially as, as not Michael, but like this group.
Right.
So the big announcement is introducing PyPI organizations by Ederbin.
So today we are rolling out today being a few days ago.
Today we are rolling out the first step in our plan to build financial support and long-term sustainability for the Python packaging index, while simultaneously giving our users one of the most requested features, organization accounts.
So these are self-managed teams with their own exclusive branded web addresses.
And the goal is to make PyPI easier for large community projects, organizations, and companies manage multiple sub teams and multiple packages.
Right.
So much like the, the GitHub org that I was talking about, you can say, okay, this person is an admin of it.
And this person can have right access to that thing, but not this thing.
Right.
So kind of, kind of those types of things instead of, Hey, everyone in the company, here's the one and only username and password for PyPI Go.
Interesting.
Uh, yeah.
Yeah.
And it's like, I opened this conversation, increase the idea is to increase sustainability.
This last year, PyPI served 235 billion downloads for those packages and saw 57% year over year growth on download counts and bandwidth alike.
That's great.
But it also means costs and effort and infrastructure and all of that is just going up.
Also, these organizations are not required.
AWS can still manage it.
However they are now they want.
So these are opt-in and it does cost.
It says a small fee.
I would love to see small fee equals a hundred dollars a month or a dollar a month.
I don't know what this is.
Um, maybe it says somewhere, maybe I got to go.
It's a sliding scale.
Yes, exactly.
If you got to ask, no, just kidding.
It says small fee.
If you got to ask, it's not for you.
Anyway, PyPI organizations, coming now, check it out.
Okay.
So is it just, oh, we don't know this yet, but is it just for things like,
things like, companies or is it, could it be for, like,
pytest or something like that?
Sure.
It could be, like, for pytest.
I mean, you talked about, it says for large community projects, for example.
Yeah.
Like, you talked about Flask.
Uh, well, you talked about Armin, who was the original creator of Flask.
But that's now under the pallets project, which runs a bunch of different projects and has a bunch of contributors.
Like, I think a pallets organization would be potentially reasonable, you know?
Yeah.
It's going to be tough to come up with, like, pricing for something like this because, like we said,
some of it is a bunch of volunteer organizations and some of it is, yeah, companies.
Uh, so, yeah.
Interesting.
Uh, yeah.
I don't know.
I, it probably says somewhere, but I didn't see it in this article on the PyPI.
Nice.
Cool.
Well, should we jump into the next topic?
Yeah, go.
Okay.
Well, I just, we, I like this article by Bob Belderbos.
It's, five tips to learn any new Python library faster.
Um, and this is, actually near and dear to my heart because we do this on a weekly basis.
Um, you know, trying something, trying something new.
Um, and, I think I have a condensed version of this,
but let's kind of walk through, these are pretty good tips on, if you're, if you're thinking
about using something, or just want to learn, you hear, here's something cool.
You want to want to learn, learn about it.
What do you do?
Um, so his first step is, quickly read the main docs.
So read the manual, RTFM.
Uh, especially I, I like things like if they have a quick start or getting started,
uh, like I like to read that.
If there's a video, go ahead and watch it.
Um, especially if it's a short video, go ahead and try that.
So, okay.
So, so you, so you know what it does great.
And you kind of know how it works and then install number two is install it.
Um, I think this is funny.
I mean, obviously you have to install it in order to play with it, but okay.
Install it.
Uh, number three is explore the library.
Essentially play with it.
Um, play around, see what you do.
Uh, Bob has a great idea of, of doing this within, Jupyter notebooks, to just kind
of explore what it does.
That's pretty great.
Um, and then, and then you have to kind of make it more deliberate.
So instead of just playing around with like maybe the things it does try to do something
with it, try to have a task.
And this, and this is a deliberate called deliberate practice, but,
this is where I think you're really going to start learning.
Something is, actually trying to get something done because often there'll be extra features
you don't need right away.
Uh, with a lot of projects, most people use 20% of the functionality.
So don't learn a hundred percent of the functionality.
You learn the 20% that you need to get something done.
So, deliberate exercise, and then maybe actually build something or change something.
So, number five is build something.
So, going into to a deeper level is actually incorporate this library in a project of yours,
or if it's similar to a, another project that you're already using, and you're just thinking
about switching, go ahead and try switching it.
Um, you might not stick with it, but kind of feel how, how, how easy it is to change over
to this new, new project.
And you might not publish it, but you might, it might be great.
Um, build, building something small is a good idea to, to just kind of get your hands dirty.
And then, the bonus number six, I always like it when the people lie about how many tips
there are.
Um, the real bonus is teaching it.
Um, and this, this is like massive, massive.
Um, and it just ties a bow on the whole learning process is trying to teach it back to somebody.
And this could be a today I learned thing on your blog or an actual longer blog post, or maybe a little
tutorial video or something, or actually just sit down and with somebody and try to talk to them
about it.
Um, one of the things that I, I find even just for ourselves from, for this podcast, trying
to look at it and go, if I was trying to teach this to somebody or tell somebody why they should
use it.
Why?
I mean, what are the different points?
So like just earlier when I was talking about Rye, what's different about that?
Well, it's, it's different because it's, it handles the Python installs also.
And it also kind of works like Pipex.
I mean, the different things about it and then think about like, and then actually try it.
So I tried it out.
I went through, set up a, an extra little project directory and tried it
out a few times and saw what it did, looked at the project Toml output.
Uh, so yeah.
And then, just doing that.
So, some great things.
Yeah.
I, I think, you know, teach it is, is really cool.
You don't have to be an expert at something to give a presentation on it.
If you structure, as long as you're genuine about it, right?
Like if you, you said, Hey, I'm going to teach you everything you need to know and how awesome
this thing is.
And really you just learned it last week at a conference talk.
People might call you out.
Like you don't seem to really know as much as you came.
If you say, no, I'm, I'm excited about this thing.
I just learned it.
I wanted to share my excitement and, and just, you know, show you a quick getting started
thing.
And then people won't go like, well, why does he know it?
Like you just start out.
Well, I just learned it, but I'm, I'm excited.
And I think you'll be excited too, if you, you know, so I do think those presentations
are awesome.
I mean, there's plenty of places.
There's user groups and meetups, regional conferences, like online meetups.
Those people are always looking for presenters.
They're like, gosh, it's a week away and we don't have a speaker yet.
Right.
So reach out.
I mean, there's a ton of opportunity to do that or even brown bags at your company.
Yeah.
Um, I like the, I like that you brought up that, be honest about it.
Um, that you like, you can even say, I, I just, I just got excited about this, learned
a little bit and I want to show you what it is.
Um, don't, I, yeah, don't make yourself out to be an expert in the, in the field.
Um, but that's great.
That's this, this process actually is like exactly how I got started, blogging about
testing is just learning, learning something new, writing an article about it and then writing
a bunch.
So if you really want to deep dive into a, into a, module or a package, you can write
a series of them.
Great.
You're getting started.
One of my first thoughts and then move on to like, well, how do I do this other thing
with it?
Uh, how do I do authentication?
We'll do a, do a little article on that.
Um, and it, and then the whole thing could end up being a book.
I mean, you could make a book or a course or something out of it eventually.
So, but if you just want to do a quick one, this is a great way to.
Yeah.
All right.
And, and speaking of just like, he opened Bob open his conversation here with like, and
some of the things I'm learning are PyScript, Flet, PySimple GUI, PyRite, HTMX, Reddit,
Leaflet.
Those are all awesome.
So I can see why you would want to learn those.
And Liz out there says, I'm an, I'm excited about this type of presentations tend to be more
to the point, which is indeed.
Yeah.
All right.
What's next.
We have GPUs next.
All right.
I know you heard that, we can do all sorts of amazing things by programming GPUs.
And if we want to process, you know, tons of data, maybe we're doing medical research
on protein folding, we're running around a cluster of GPUs and we could, you know, solve
some kind of huge computational biological problem and make a big impact.
But if you're going to do that, you sure better hope that you, if you're gonna do something
like CUDA, you better hope that you have not just GPUs.
That's way too broad.
No, no, no.
You have Nvidia GPUs.
And Nvidia GPUs are sometimes hard to come by.
A couple of years ago, they were very hard to come by unless you're using the cloud where
you can go get them.
Right.
I have an awesome Mac here.
I've got my M two pro Mac mini now, and that thing has 16, GPU cores on it.
Can I do CUDA or use PI CUDA on it?
No, that's not an Nvidia one.
And so like honest on Mac, especially it's been extremely hard to do any sort of GPU computation.
Right.
Okay.
We had the, the afterburner cards and those like weird external graphics cards on the older
Intel ones, but those are not even an option in the last four years.
So, you know, that's, that's a drawback.
And on Mac, the graphics language like direct X on windows or open GL and a lot of things
is called metal.
And so I want to introduce you to a library and an article called Python gets down to the
metal, not like CPU, but GPU.
And it says, are you a Mac and Python person?
Do you have a trillion numbers to multiply together?
You don't have all day to wait for them.
It says, well, Python is quite slow.
Although the person acknowledges, I've been a happy Python user for quite a while.
Um, you know, for pure number crunching, Python is not as fast as the compiled languages like
C and rest, which is totally true.
Is it plenty fast to drive your web API?
Probably.
It's probably really fast for that.
But if you literally have a trillion numbers, you want to just crunch them in a loop.
The advice is not to do that, right?
The advice is to use something like pandas or numpy or desk or something like that, which
are really all C base.
Or if you had a NVIDIA Jeep, graphics card, maybe you could use some kind of thing
like PyCuda.
But again, on the super powerful computer, it is just, you can't do it.
There's no way to get an NVIDIA graphics card.
However, if you could somehow program this metal, it says metal does have a way to program it.
It's just, there's not a lot of things for it.
And it says there's a language to do on GPU computation that looks very C++ like.
And it says on a, on an M2, this is not the pro, but the regular one has eight GP cores,
which means let's see, that gives some numbers here.
Yeah.
It says, on the eight GP, GPU core version, you could do about a trillion floating point
operations a second.
And that's the base version, right?
And so the bigger models like mine closer up towards 10 trillion.
Right.
So mine's probably like six or seven trillion, but, you know, the, the high, the ultra
max, I don't know, whatever the bigger ones can do even more than that.
Right.
So that is a ton of power.
And so we introduce metal compute.
So pip install metal compute.
And with this, it's a little bit like doing SQL, like raw SQL database stuff in that you define
a thing that you want to run on the graphics card.
That looks a lot like a lot like C++.
I think you would imagine Brian, what do you say?
Yeah.
It's just hash include metal standard lib using namespace metal, write a function, do the
operations.
There's a lot of const device float star buffer.
I mean, it's not easy, right?
But it's also not that easy on, on CUDA and other things as well, generally speaking.
So they come up and say, all right, what we're going to do is going to come up with a bunch
of, you know, a vector and a matrix.
And we're going to multiply them and do a bunch of work and get the answers out.
And boom, off it goes.
Print out the answer.
Very cool.
It's kind of cool that you don't have to, you don't have to compile it or anything though.
I mean, or it is cool or have it in a separate file.
It's just a string there.
That's, that's neat.
It is.
And if I was a, if this was my job and someone said, Michael, you're writing this program,
I would not do what they are doing in this example and put triple quotes and put metal
code, which is like C++ in there.
I would write a metal file or a C, call it CPP or whatever's going to give you the best
autocomplete and color syntax highlighting.
And then just do, you know, path read text and get that, you know, in one line, get that
out, but have that in a separate file.
So you could sort of more, more properly reason about it.
But anyway, it says, look, we run this together and did a whole bunch of work, took 70 milliseconds
to do 10 multiplications.
Not that impressive because there's a startup cost.
What if we gave it a billion, a billion multiplications to multiply that vector in that matrix?
Oh, that takes 0.3 seconds, a billion times.
That's a lot.
Yeah.
So, so that's pretty good.
It does say though, look like part of the, the speed or part of the challenge is moving
data into memory and then out of memory.
And so the more you move stuff in and out rather than kind of loaded up with the data and then
do operations on it, it will be slower.
So it talks a bit about some of the performance things that you can do to make it faster.
It gives some examples on how to do that.
There's probably some interesting trade-offs with the Apple Silicon having a shared memory
between memory memory and, and GPU memory, right?
You don't actually have to copy it between there, but I suspect that you're going from Python
to C++ memory and back through some kind of serialization, right?
That that's going to have some kind of cost.
Who knows?
Anyway, there's some cool examples of a Mandelbrot set being computed with this or Julia set rather.
But yeah, people are been dreaming of doing GPU processing on their Macs.
Well, this might be worth checking out.
Nice.
The other thing that's kind of cool about it is it doesn't, you know, it's not like a library
that takes Python code and compiles it or transpiles it to run on the GPU, which would be awesome.
But at the same time, if it doesn't quite get it right, how much control do you have?
How useful is it?
Right.
You don't know.
Like here, you can just, if you can just give it the data as an array, then you're just writing
straight metal, which is a bit of a pain if you don't know it.
But at the same time, it's, it means that it's, it's super flexible, kind of like a DB API.
You open a connection, you say, here's a string, run that on the database.
You can give it a selector, some kind of query or update, and it's, it kind of gets out of the way.
So it seems pretty flexible in that regard.
Yeah.
Interesting.
And this Mac only, right?
So this is.
Yeah, it's Mac only.
But take that NVIDIA.
You can't run Mac.
No, just kidding.
I have both an NVIDIA card and this, but I don't really have, I would like to do more GPU
stuff, but I just don't have a trillion numbers that need multiplying right now.
Well, you know, it's not a bad thing.
Someday.
No.
All right.
Over to you.
I've got, so we're onto extras.
I've got just one extra that I wanted to bring up.
And that was just the textual.
So Will McGooghan posted like this picture and like with no explanation.
Apparently it's the, it's the, the weird, I'm showing a weird bird with a large mouth.
It's kind of an ugly thing, I think.
But it's the, the logo for frog mouth.
And what is frog mouth?
Frog mouth is the first, apparently first of possibly more to come applications that the
textual team is releasing that are built on textual.
So frog mouth is a markdown viewer and browser for your terminal.
And it looks pretty clean.
I tried it out as well.
I haven't been able to get like these, these, these menu bar thing or the, the tree things
on the side.
But it's like a, it's like a navigation thing with like, you can browse, browse your markdown
with within textual.
So it's kind of fun.
Yeah.
Continues to impress with what they can build with that stuff.
Yeah.
And this is the application that I tried when I was talking about Rye.
I tried installing this as a global application and then it worked just fine.
So.
Yeah.
Cool.
All right.
I would like to serenade the audience, Brian.
Oh, yay.
Yeah.
I was going to talk about this as a main item.
This thing called serenade at serenade.ai.
And it's really neat.
What it does is you install a plugin for your editor where your editor equals VS Code or Jetbrains
IDs.
None of them do.
And then you run this in the background and you can speak to it.
Like you hit a hot key or whatever.
And you basically start speaking code oriented operations.
So there's a cool example that it shows somewhere in here.
Let's see.
Yeah.
If you go and click on the docs, you'll see a bit of a video thing here.
And basically you can go into it and you can say, you know, teach it to do tests.
You can navigate around.
This is kind of cool.
So if you're typing in the editor, you're kind of good.
I mean, I know if you have RSI and stuff, that's not ideal.
But one of the challenges is like, okay, I need to leave this and navigate over there.
So you can say things like open some file name and it'll actually go through your editor
and say, oh, that's over in this directory.
You need to expand the section and it'll jump to it.
Or you can say, go to this function or, you know, those kinds of things you can speak to
it and it'll do it.
So anyway, it's really cool.
Why is it not the main item?
Because I'm super excited about these kinds of things.
The reason it's not is it hasn't really been touched for coming up on a year.
And that was just a merge of some PR.
Is it still going?
I don't know.
It was kind of working pretty good, but then it was throwing errors when I, so I don't
know.
I love the idea.
If this thing comes back to life, you know, someone out there, let us know.
Cause this is super cool, but it doesn't quite seem to be getting kept up with the editors
and tools and so on.
I liked your comment in the show notes.
Serenade has seemed to gone silent.
It has gone silent.
Oh, thank you.
It sure has.
But it's still worth checking out.
It's kind of cool.
And then Brian Skin is when I, we've been talking a lot about packaging on this episode
and I did my packaging discussion and inspired by that, or maybe just the discussion that
I was also inspired by.
They're setting up a Python distribution packaging round table, not just of the people inside Python
core devs world, but in the broader ecosystem for like Anaconda and data science and that.
All right.
Do they have 13 maintainers across nine projects lined up for Tuesday, May 9th and a link to
go attend it.
So if you're interested, you can go check that out.
Yeah.
So I'll put a link in the show notes.
Yeah.
Cool.
Yeah.
That's it for the extras on my end.
How about a joke?
Yeah.
But before we go there, I just wanted to say, I just remembered the person that like told
me about Ryan in the first place.
And now I feel like a dork.
It was Paul Everett.
So thanks Paul from JetBrains.
Awesome.
Yeah.
Paul was quite the host at PyCon and did a bunch of awesome stuff for many people and much
appreciated.
All right.
How about a joke?
All right.
Before I put this on the screen, I'll tell you about it.
You know, sometimes programming is just amazing.
You just get in the zone and you just go and look what I built.
Boom, boom, boom, boom.
Other times you end up with a bald patch where you've been tearing your hair out.
You're like, no, why?
You may end up yelling at the computer, right?
There's just like a bunch of stuff.
And this joke highlights the small wins you might make in this situation.
Okay.
So it's just a person with two monitors, a bunch of energy drinks crushed next to them,
a bunch of wrappers, empty coffee.
They've clearly been here for a while and the arms are up like, yes.
Wow, a different error message.
Finally, some progress.
Yes.
Have I mentioned I've been working with a guy named Lauren on a Flutter mobile app?
Let me tell you, there are a lot of tools in that tool chain.
And more than once here, I've been like, yes, that's not the same error.
We're making progress.
Yeah.
This was me yesterday for half the day.
Yeah.
Working with a Docker compile that used Docker and Artifactory and a whole bunch of other C++ stuff.
Indeed.
All right.
Well, let's hope for different error messages for anyone out there struggling.
And then eventually, no more error messages.
That's a good one.
Like, may you have a different error message tomorrow.
Exactly.
May you live in interesting times and may you have different error messages.
All right.
Well, thanks for being here, Brian.
Thank you.
Thanks, everyone, for listening.
All right.
Bye.