Python Bytes - #372 uv - an impressive pip alternative
Episode Date: February 20, 2024Topics covered in this episode: uv: Python packaging in Rust jpterm Everything You Can Do with Python's textwrap Module HTML First Extras Joke See the full show notes for this episode on the web...site at pythonbytes.fm/372
Transcript
Discussion (0)
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly
to your earbuds. This is episode 372, recorded February 20th, 2024. And I'm Michael Kennedy.
And I'm Brian Akin.
This episode is brought to you by Scout APM. Super psyched to have them supporting the show.
So we'll tell you more about them later, but please check them out. The link is in the
podcast player show notes or on the website.
If you are one of the lucky ones, Brian, who is attending this live,
they got here by going to pythonbysetup.com slash live,
crushing the bell, saying get notified.
They got notified when this comes on, when it's scheduled, and here they are.
For those of you who are just listening, we super appreciate that anyway.
How are we listening? Thank you, thank you.
Connect with us over on Mastodon.
We're all on Fostodon, at Brian Ocken, at M. Kennedy, and at Python Bytes.
Brian, before we jump into the news and before I forget, I just want to make a quick announcement.
I will be at PyCon Philippines starting.
I leave tomorrow at, I fly from Portland to San Francisco at 8 p.m.
And then I leave San Francisco at midnight.
So who knows what state I'm going to be in, but I'm pretty sure with the time zone change
and the travels and all this, there's not going to be a Python Bites next week.
So we're going to be probably skipping next week, which is a good chance for people to
catch up if they fell behind.
Yeah.
And also I'm jealous and I hope you have a great time.
Thank you very much. I'm hope you have a great time. Thank you very much.
I'm going to have a great time. I'm worked as was writing the keynote speech yesterday and
it's going to be good. It's coming together nicely. So it's always nerve wracking. I don't
know how, what is your, what is your way of working on box and stuff? Like I, I want to be prepared
and I'm the kind of person that would get prepared a month or two months early. But then if I write the stuff and then put it away and then come back to it, I've kind of
lost the inspiration and the nuances and the details. So I don't want to write it too soon,
but I also don't want to wait till the last minute. So there's this weird, weird trade-off.
I feel I mostly, I try, I usually try to cover too much stuff and talk. So I try to hear it down
and then, yeah, I practice the heck out of it uh the ones where
some some talks i like i'm fiddling with the slides too much until like five minutes beforehand
and that goes terribly so i i yeah i like to do it early in practice so all right well over to you
i know you have a big announcement yeah you're coming in first yeah you are. Okay. is the python end so uh like replacing um this is actually incredible it's a it's replacing uh pip
pip tools and virtual lamp all in one new uh rust driven tool um it their announcement said maybe um
uv represents a milestone in our pursuit of cargo for python a comprehensive python project and
package manager that's fast, reliable,
and easy to use.
They're also kind of, it's interesting, kind of combined in this announcement is that they're
taking, Astral is taking stewardship of Armin Roeneker's Rai tool.
That's an experimental tool.
So I'm not sure what that has to do with this, but I don't know.
It's interesting.
But have you given this a try yet?
Oh, yes. I am so psyched about this. Charlie and team, congratulations, because this is
setting the world on fire in a lot of interesting ways. So I, you know, Charlie aimed this right at
like my style of programming and working with Python dependencies and projects. So on one hand we have just the pip pip free side, right?
And then on the other, you've got the poetry and other, um, pip
and where you've got like some other API that kind of manages everything.
And I want some of the benefits of that, but I want it to be just a simple
requirement that TXT or something like that in the end, right?
Yeah. And so I use pip tools and pip tools will go and say, okay, what do you say? I want it to be just a simple requirement.txt or something like that in the end, right?
Yeah.
And so I use pip tools and pip tools will go and say, okay, what do you say you actually need?
And then let's build out what would be into the virtual environment after that.
And it's great, but the command pip compile, like for mine, I don't know how long it takes,
probably 15 seconds to pip compile, update the list of things for TalkPython training.
I think there's 250 dependencies in the dev version.
It's out of control.
It just takes a real, real long time.
With this, instant.
Yeah.
And it's just so good.
They have some benchmarks up there.
And it's like PIP sync versus UV PIP sync is like 60 milliseconds versus almost five seconds, right? Those are
different types. It's, it just happens versus UAE. Okay, hold on. It's working. You know what I mean?
Yeah. And what's really pretty interesting is that it looks like it's gotten a lot of,
it's, it's not necessarily that it's just because it's written in rough, rough rust,
reading rough as I'm saying that, not just that it's written in rough, rough, rust, reading rough as I'm saying that,
not just that it's written in rust,
which it happens to be
because that's the vibe of Astral, right?
Starting with the rough stuff,
but that they've maybe unlocked
some different algorithms or techniques
or something like that,
where even if it were in Python,
it would be faster,
which is pretty interesting.
Yeah, there's some caching that they've done
and like site-wide caching and keeping also keeping pip um actually makes
sense to have some of this stuff virtual m and pip outside of the python tool chain system so that um
because you're going to want it in each virtual environment so having it installed outside is kind of interesting so um yeah i'm pretty uh it's super
fast um the the hope is to be uh api compatible or at least uh interface compatible it's um in the
they're they just don't have all of the features yet so um but like i don't mean to say that it's
not worth trying already it is production ready right now and that's what they're they've tested the heck out of it it's just that um you have to like work with
your workflow to make sure that you work with it so um i was amusingly trying it out yesterday and
ran into like three things right away that are two things that didn't work so i did uh tried to
use the dash dash prompt to have virtual I am just create
my virtual environment with the same name. And prompt isn't supported yet. But it is I went to
file a defect and it was already fixed. It just hasn't been released yet. So you know,
by the time you listen to this, it's probably been released and it'll work.
They're doing a lot of releases, aren't they?
Yeah, there's been seven releases in four days it's incredible and a really responsive team a lot of people are trying it out though so um yeah i'm glad they're
responsive because there's a bunch of issues people are working on um it's really fun to watch
the other thing uh was um oh um oh so virtual environments work work really fast it's like so
fast um and the resolver actually is something we don't really
talk about too much. But the resolver, like you said, when you're pip installing something,
if you have like a requirements file, you got a bunch of projects in it, or a bunch of things
you're pulling in dependencies, they might have conflicting dependencies or not really conflicting,
but they're the rules are such that you have to pick the right dependency so that it matches both tools um that's all done and it's super fast i'm really impressed with how this
thing is um and and apparently everybody else is too um because yeah like it almost almost
immediately after the announcement so look at all these contributors you got 32 contributors already. These are not just people at Astral.
I know that Brett is not there.
So Talks has already announced that there is a Talks-UV plug-in
so that you can have Talks act faster too
and use UV for virtual and for PIP also.
That makes it faster.
I think that's... And I'm sure there's more tools to come
that will support UV out of the box.
Yeah, awesome.
I'm super excited, but I have a bunch of aliases for my shell
that I almost never type pip, you know, python-mv,
like unless I'm doing like some presentation
where I'm not sure that people would know what the heck's going on.
So I'll just type V in V and that will do the magic or want to activate environments, AE, or, you know, I want to install the requirements.
I'll say PR, right.
And I rewrote all of those to move from using pip to using UV.
And it's basically like the same workflow for me, just better.
Well, the, one of the things that I do a lot is to just see what's in my virtual environment is do a pip list. And that's not supported yet either. But freeze is and list is coming. I, you know, but so just use free. I didn't actually just for some reason, I think there's like a 5050 split of people that use generally pip freeze over list what are you a freeze person
or a list person i'm a list person these days uh but but that's because yeah because i don't use
pip freeze to generate like the requirements.txt i use pip compile right right but pip freeze will
just like list out which what things you have installed and what versions yeah yeah and that's
what i want list for so i don't know why i used list but anyway
yeah that's true pretty fun yeah okay a couple of pieces of real-time follow-up first of all
ophek lev from hatch says the next minor release of hatch will have an option to use uv under the
hood instead of pip and virtual env hooray yeah i love hatch i've been doing like doing a lot of
stuff with hatch lately and it's really, really nice.
So, in fact, you're killing it.
Keep it up.
Very nice.
And you mentioned talks.
Henry Schreiner, who I see some comments from him out there as well,
says with the NOX back in, using UV in the NOX back in,
it drops the time taken to build the docs from 22 seconds to 4 seconds.
So, you know, it's not like 22 seconds is going to build the docs from 22 seconds to four seconds so you know that's you know it's
not like 22 seconds is gonna change the world like oh if they just didn't take 22 seconds to
build the docs but the faster these things get the more willing you're just like to do them more
iteratively and you know get tighten that feedback loop and stuff like that so like for example with
rough you know and pycharm now you can just check the box
like run run um rough onto the end of this project when i hit save you know if it took five seconds
to do that you would never check that that would not even be a box you could check right yeah but
because it's so fast so uh hopefully i'm not missing anything else from folks out there but
this stuff is this stuff really neat and i am super excited i would love if some of the
the things they learned from this could be brought back into standard pip just to make standard pip
faster too that would still be cool yeah and this i guess that brings up a side question is um
is really how uh how much energy there's going to be around supporting the other tools that are
getting replaced by things that astral is building but there's a yeah anyway
we'll have that conversation later maybe yeah opec agrees with you that much of the speed up comes
the way they're they're doing caching very very nice so you know people check this out it's been
a few days and it's things are going fast in this space so yeah very exciting. Let's go on to the next topic. All right. Brian,
Jupyter notebooks have definitely taken over as a really interesting way for creating,
writing Python code, visualizing Python code, sharing it, communicating with it. And obviously
Will McGugan's work with Rich and then on from there, Textual is doing amazing stuff too, right?
Yeah.
What if those came together?
Like peanut butter and jelly or whatever it is that you put together
that goes together well.
Peanut butter and chocolate, man.
Yes, okay.
Sorry, Reese's Pieces.
I got it.
Okay.
David Brochart says, I just published my first blog post,
which is, if we go over here, JP Term.
Jupiter in the Terminal built on Textual and Rich.
How cool is that?
That's great.
There's a bunch of Terminal fun stuff that's based on Textual and other things that we could cover.
But this is what I'm covering today.
I'll save the other for next time.
So Jupiter in the Terminal.
And it says, well, you know, basically David says, look, the
terminal is the new browser in the sense that we all have a terminal.
And if we write to this, it's kind of a simple, cool UI that everybody already has.
You can just plug stuff into it largely because of all the work that they've done over at
Textualize with Textual and Rich and so on.
All right.
So he said, look, look at all these widgets we already have.
So like there's a select widget
and there's a whole bunch of others.
But if we view this, I'll open a new tab.
Maybe open image in a new tab.
Oh, it's downloading.
Hold on.
Because of course it is.
Open this up.
It's JupyterLab side-by-side with jp jp term and check it out it's like you've got
your cells you've got your in your little bracket and quite similar huh what do you think about this
that's incredible that's pretty cool yeah so it's got uh let me go back to the article
here you go down it's got graphing it's got like charts for it and he says basically one of the
real similar things to compare it to might
be jupiter light because jupiter light is a web assembly based all front end jupiter and this is
like client doesn't even need a server right because it just runs although he does point
out with textual web realize is a way to put this on the internet and share it as well but like here
look here's a bunch of cool graphs over time in the terminal.
Yeah.
So this is a super early, almost a proof of concept,
even has images, which is interesting.
So I think people should-
Don't do that.
They're bad, yeah.
Like you want, if you long for like Commodore 64 days,
so you got something in store for you.
But you can see it's quite new.
It's been created like four months ago and just announced, I think, pretty recently.
So people go check this out.
David is, I think, a Jupiter Core Dev or at least a contributor over there.
So yeah, interesting to see where this goes.
Yeah, that's neat.
Cool.
You know what else is cool?
Our sponsor? Yes. Yeah. That's neat. Cool. You know what else is cool? Our sponsor.
Yes.
Indeed. Indeed they are.
So let me tell you real quick about Doubt APM.
They're big supporters of Python Bytes, so we appreciate that very much.
So if you are tired of spending hours trying to find the root cause of issues impacting your performance,
then you owe it to yourself to check out Scout APM.
They're a leading Python application
performance monitoring tool, APM,
that helps you identify and solve
performance abnormalities faster and easier.
Scout APM ties bottlenecks such as memory leaks,
slow database queries, background jobs,
and the dreaded N plus one queries
that you can end up if you do lazy loading
in your Thorium and then you say, oh no, why is it so slow?
Why are you doing 200 database queries for what should be one?
So you can find out things like that.
And it links it back directly to source code.
So you can spend less time in the debugger and.
Healing logs and just finding the problems and moving on and you'll love it because
it's built for developers by developers.
It makes it easy to get set up.
Seriously.
You can do it in less than four minutes.
So that's awesome.
And the best part is the pricing is straight forward.
You only pay for the data that used with no hidden overage fees or per seat pricing.
And I just learned this, Brian, they also have, they provide the pro version
for free to all open source projects.
So if you're an open source maintainer and you want to have Scout APM for that project,
just shoot them a message.
There's something on their pricing page about that.
So you can start your free trial
and get instant insights today.
Visit pythonbytes.fm slash Scout.
The link is in your podcast player show notes as well.
And please use that link.
Don't just search for them
because otherwise they don't think you came from us.
And then they'd stop supporting the show. So please use our link pythonbyte.fm scout check them out it really
supports the show awesome yeah all right over to you um what's next i've got a little little topic
um martin heinz wrote a blog post called everything everything you can do with the python's
text wrap module and i love the text wrap module and i think
that more people i think a lot of people just forget about it but it's very brian do you have
that feeling where like you spent half a day implementing some algorithm then you're like oh
that was a function i could have just called yeah exactly text wrap is that yeah um there's and you
know every time i come back to it i'm like like, Oh, I'm still using stuff that I
shouldn't. So it's a pretty short article, go through a few of the features of text wrap.
First off, it's shortened. So if you've got if you want to make a piece of text shorter,
you can use shorten. And it's cool, because it also does a placeholder thing. So it'll put like,
like, dot dot dots and, and brackets or something or whatever placeholder thing so it'll put like um like uh dot dot dots and and brackets or
something or whatever placeholder you want to say there's more text there it's just we've cut it off
um and uh looks really nice uh easy to easy to use you just call it uh it's just a function but
then there's um there's wrap uh which seems obvious but um can do word wrapping. So you can split a long chunk of text into multiple lines.
But you can also do it.
One of the things I like here is this is said, well, yes, of course, you can use it for splitting long lines into different multiple lines.
But also, even if you're not going to print it like that um it's very useful if you're going to batch that batch work on text
you can uh split a big chunk of text into small or you know even sized batches to work on those
um that's a pretty cool use case for that i like it uh there is there's even um you can specify
drop white white space keyword for that that's pretty cool i didn't know about that neat um the
there is a there's a
class also so all a lot of the stuff you can do with uh text wrap you can do within a um an object
so there's a text wrapper class that you can create a text wrapper object and do a whole bunch
of work with that multiple times um and only specify it once in the constructor very cool
and then at the bottom last but but not least, is my favorite
use of text wrap is to dent. So to dent will take like if you've got a multi line string,
and it's in your code, so it's all like off, you know, it's indented with the rest of your code,
that multi line will have a whole bunch of extra, like extra white space on the left.
And you don't really want that when you're're actually using it and d dent will take take out those extra uh extra left
white space and that i love that and this seems like it's a weird thing to have built in uh but
i use it a whole bunch of times all often in writing tests because i've got um a multiline
string that i want to compare to some output um and i don't want it at the global level i want it you know um in my in my test function
so uh i can just do that and use dedent to get it back to right because it would look weird
left aligned inside of an indented function right yeah um so i mean can, it just looks ugly. So yeah, you just, you lose the flow of where, where it belongs.
Yeah.
Yeah.
So, uh, text wrap, um, it's there.
It's fun.
Use it.
You already have it.
It's in Python.
Yeah.
Yeah.
Very nice.
All right.
Let's let's talk about some design principles for the web here.
This is not exactly Python, but it certainly links back to some cool things in Python.
And it says place I ran across called html-first.com, right?
And the idea is there seems to be some fatigue.
Like, you know how JavaScript, it used to be so easy.
You would include a script, or if you were doing something super small, you maybe would
just say script tag, and you would write a bit of JavaScript right in the page.
And then you carry on.
You're like, oh, that was that was easy look that just worked and then it said oh well now we're gonna
put it over on this other place no we want to like minify it also we're gonna shake it down
to only include the parts that we use and we'll do the same for the css and then you need this
build step and then we're going to compile it from typescript to javascript and then shake it down to
not include this like what and then you're going're going to include it with import, export it with Node.
Why is this so hard?
Why are there so many steps to this thing that used to be so easy, right?
And so this is kind of like,
we just not have that as the default way of working already.
So HTML, we'll get to HTML.
HTML first is a set of guidelines for making it easier,
faster, and more maintainable to build web software by leveraging the default capabilities
of modern browsers. I learned something I didn't know from here that I used to do with JavaScript
that I will never do again if I don't have to. So awesome. And then the extreme simplicity of
HTML's attribute syntax and keeping your view source alive, right?
You used to be able to go to a website, like, how did they do that?
That's cool, view source.
Now it's just like one tiny line of a bunch of stuff that triggers JavaScript stuff.
You're like, oh, well, all right.
Or how did they do that?
Oh, it's a bunch of divs.
Yes, exactly.
And so the goal is try to widen the pool of people who enjoy web development. Also, you can make it less
expensive for your company because it's just less complex. So it's not just, you know, dev yells at
the cloud because people are making it hard, right? Screams it into the sky, but some practices,
right? So there's some examples, prefer vanilla approaches. And so for example, did you know,
you could say details
summary and then stuff below it and if you click the summary it'll expand the thing below it no
javascript i didn't either no javascript yeah how about that and then uh so they have a encouraged
versus discouraged here's like import react user from React, create a details component, which is an arrow function,
which returns a const of things and toggling the content.
And then you on click, you like link,
then you export the detail.
This is the import export I was railing against, right?
So that's one.
Prefer just, if you can do a basic HTML
or even basic JavaScript, like don't go over the top.
And where possible, practice top and where possible practice to
where possible define default to defining styles and behaviors with inline attributes with things
like tailwind or tachyons. And you can use libraries like hyperscript and Alpine. And it
says you're yes, it does mean your HTML gets a little bit busier, but you don't have to go to
three places to figure out what's happening. So for example, it says encouraged button on click this dot class list dot add background
green discouraged.
You have a results pane that says click me.
And then you have a CSS section that actually what happens when you do that changes the
color of green.
Then you have some JavaScript that gets it.
And then when it's done, you set the class, which then goes back to CSS.
And these are usually mushed all over
the place and you're like what is happening right yeah it says you'll notice the separation of
concerns is kind of not so much uh awesome here however you should maybe consider the locality
of behavior more than you should worry about separation concerns and htmx carson gross has a
nice essay on this like yes you might repeat yourself sometimes
but right there you see everything that's happening instead of having it so spread out right
yeah all right next go ahead i just wanted to comment one of the things that i like about this
sort of model is um is that i'm i'm learning i'm frequently you're learning like new web frameworks
like i'm working on uh learning django and uh and you know
fast api and others and a lot of times it's templating that i'm working on and to to
understand how it's going to get output keeping the templates simple and like mostly html helps
helps with discoverability and learning something new so if, even if it isn't like a production thing later, but it might be, starting out simple really helps with the learning process.
Yeah. Oh, absolutely. And you also have to learn fewer things, right?
Yeah.
You have to learn three other frameworks and build tools and so on. All right. Another one
is about try to use libraries. If you got to use libraries, try to use ones that leverage
HTML attributes over JavaScript and custom attributes.
Like HTMX is a real nice example of that.
To disfavor build steps.
So encourage the builder to say stylesheet slash styles dot CSS.
Discourage, distribute, output, NPX, CSS, compile with a watch.
And then don't forget to run that.
And then why is this not updating?
You know, all these different things.
And then finally, this one, I think the HTMX is really relevant to Python folks.
But also this one.
Their example is Ruby, but it just as well could be any, the WTF forms.
Is that what it is?
I think it is.
The form builder type stuff.
You see a lot of that actually in Django.
It says, prefer naked HTML to obfuscation layers that compile down to HTML.
So you got a form.
Just write the form.
Put the values in it.
Instead of form with and then form like label for this.
Form text field for that part of the model and so on.
So anyway.
And finally, preserve some view source for us all
because it'll help everyone.
But anyway, I like this and I, you know,
it's interesting to think of as a philosophy.
Yeah.
The build steps, they also reference
like a whole bunch of people,
how it used to be completely like,
oh, you're such a noob if you want to skip
having like a bunch of build tools along the way.
But references for different articles
and places where people are writing about like,
you know what, we're done with this build stuff.
We're just writing CSS.
We're just writing JavaScript.
We're going to go with that.
So anyway, pretty well backed up some of these ideas.
Nice.
And that's all of our main items.
You can see there are tabs left for me.
So that means I must have extras.
But what about you?
I do have extras.
Do you want to go through yours since they're up?
Or do you want to?
Sure, let's do it.
All right.
So first of all, Vincent Warmerdom says,
hey, a new Pi Data location, Pittsburgh.
So there's a call for proposals at Pi Data Pittsburgh.
Let's see, when is it?
Hopefully it's not over.
So yeah, so if you want to speak,
if you're in the general Pittsburgh area or you want to be, then check out PyData Pittsburgh and go submit some talks there.
Let's see when this is going to be.
Surely.
April.
Okay.
April 11th, I guess.
Anyway, check it out and you can submit a talk there.
That's pretty cool.
I just want to bring out one more example.
You know, Brian, I rip on the ad space and I say, look, we should
run ad blockers. We should, we should not support these people. And I know some folks are out there
like, well, but then you're not supporting creators. You're not supporting the small
folks who have Google ads on their site or whatever. And I don't know. I just, I think
the trade-off is not really worth it. So I just want to point out one more example of like terrible stuff that's happening. So our own Oregon Senator
Ron Wyden is starting an investigation because a data broker who gets data from, you know,
all these, these different sources like ad retargeting stuff used abortion clinic visitor
location data because their endpoints were not blocked by
some sort of dns block or something well to help send targeted misinformation to vulnerable women
how terrible right yeah awful so i think we all should just stand up to stand up to the like uh
the retargeting remark like we don't have. That has nothing to do with trying to make money for content creators.
Yeah, I know. Except for that, the,
the data flows into these shady places, right. And then they, then, you know,
they already have it. So instead of trying to sell them shoes, like let's,
let's do something terrible like that. So, yeah. All right. Anyway,
next DNS.io folks. Okay.
Call for proposals is also open for a very close nearby SciPy 2024, which is awesome. This will be in Tacoma, but I am already tied up hanging around the house.
My wife is traveling for work at that time and somebody has to stay with the dog and the kid.
So I'm not going to this. I have a feeling that's the same time frame as Oregon Country Fair,
so I probably can't either. Yeah. But anyway, there's a lot of people out there who can
and a call for proposals are out, but you must act.
You must act soon.
You have exactly seven days to get this ish, depending on when you listen.
But as I speak, you have about seven days to get your talk proposal in.
So please go do that.
So over to you.
February 27th is the end time.
Okay.
A handful of topics.
PyTest 8.01, 8.0.1 is out.
And why is this important?
One, it's the first bug fix since 8.0 came out.
And it has the bug that bugged me.
So there was a regression where if you parameterization would go backwards for some reason.
Yeah, we talked about that before.
So that's fixed. So I've got it updated to 8.01. would go backwards for some reason. Yeah, we talked about that before.
That's cool.
So that's fixed.
So I've got it updated to 8.01.
Everywhere I'm using PyTest.
Okay, next, if you'd like to understand dependency injection,
Hinnick has a new video out,
Loose Coupling and Dependency Injection,
the easy way.
And I really like the
the dude and i like what he's doing up on youtube so that's fun plus dependency injection is not as
complicated as it sounds and uh and he'll show you but um but i freaked out the first time that
people were like oh fixtures they're kind of like dependency injection i'm like i don't know what
you're talking they are kind of like dependency injection indeed yeah yeah um i had a uh a guest nicole on
uh python test recently this hasn't been aired yet but when we were we were talking about something
completely different and i mentioned uh all of the rust that's coming into python community
and and i said but i mean i want to try to learn rust. And, but I don't have
a lot of time. And she said, Oh, we had the same problem at work. So I wrote a tutorial. So there's
yar.fyi. Yar is yet another rust resource. But the pirate friendly. Yeah, pirate.
It's a it's a rust tutorial. um intended for people that already know how to
program they just don't know rust and um so i'm kind of excited to jump into that um okay what
else oh um yeah i'm looking for trying to ramp up interviews for python people so if there's uh if
there's just some interesting stuff around the python community that you'd like me to talk to, or if you'd like me to talk to you, reach out.
And the first episode was Michael Kennedy.
It was a good episode.
There's only been 12 episodes so far, but I want to get more out.
And the last thing I wanted to know, there's an interesting thing, phenomenon out there.
Did you know that there's people still using X?
Yes, I've seen them.
There are many of them over there, actually.
I have, I am officially following zero people
just to like, as a protest.
I don't really, I show up there about once a month
to check my direct messages.
So if you want to contact
me, I will probably reply to you eventually, but just warning. I'm not there very often.
Indeed. Indeed. Awesome. Well, a bunch of great items. How about we talk about some
unfortunate architectural or vendor-based decisions as part of our joke here. You ready?
Have you seen this joke? Did you look ahead? I have not looked ahead. I don't know what you're talking about.
Beautiful.
All right.
You ready?
Yeah.
Do the joke.
So here we are.
I got this over on Reddit.
And of course, I zoomed it in.
So why are we using SAP again
when there's this open source thing
that is so much simpler?
Or why are we using Oracle again for this?
Because whatever.
So there's a angry team
lead or something why did we end up with a solution a couple people like uh cool savings
uh time savings maybe and then someone like a hipster looking dude in the back's like uh the
vendor sent me a yeti tumbler so they grab him and throw him out the window yeah why are we stuck
with this crappy system that is like whatever well it's conference swag basically
yeah i think the real answer is usually um the best options were all free um and we needed to
have to pay somebody um yeah that's true that's true well none of them had an sla but it's like
but do you have a yeti tumbler i i have one of these like soft
yeti uh coolers that we'll take we go out camping or boating or something but i don't have a tumbler
no i don't believe so you i had to look it up i didn't even know what this was but oh yeah yeah
this is like the role yeti is like the rolls royce of like hillbilly land i guess i don't know they're like they're like super super
um nice coolers if you want a thermos for your coffee but you don't want to spend ten dollars
you want to spend forty dollars get a yeti yeah yeah i'm like we have a lot of yeti stuff actually
it's really nice i'm just joking bougie what if stuff got warm brian what if stuff got warm, Brian? What if it got warm? What if your beer got a little bit
warm and your mountains and your cores, they weren't blue anymore. They turned whatever
color they're not when they're not blue, whatever color they are. And they're not blue. You
know what I'm talking about? Like the core of the cores of beer cans has a can that when
it's like a certain temperature, the mountains on the, on the can turn blue. And if it's
like too warm, they like turn white or something. I don't know what other color okay so this is a very serious options we could have made better
beer or a better can we chose a better can what do you see when you're shopping come on now
awesome yeah okay yeah fun as always thank you for being here and thank you everyone
for listening see y'all