Python Bytes - #341 Shhh - For Secrets and Shells
Episode Date: June 20, 2023Topics covered in this episode: Pydantic roadmap The Right Way to Run Shell Commands From Python US: Yep, We're Buying Your Data, Including Your Embarrassing Secrets Pro-Tip – pytest fixtures are... magic! Extras Joke See the full show notes for this episode on the website at pythonbytes.fm/341
Transcript
Discussion (0)
Hello and welcome to Python Bytes where we deliver Python news and headlines directly to your earbuds.
This is episode 341, recorded June 20th, 2023, and I am Brian Ocken.
I'm Michael Kennedy.
This episode is sponsored by us.
If you want to support us, you can take one of the courses at TalkPythonTraining.
There's an excellent PyTest course there.
And please check out Test and Code Podcast and a book about PyTest if you're curious.
We also have Patreon supporters
so thank you Patreon supporters.
If you'd like to talk to us or suggest
something, we've got
a contact form at
pythonbytes.fm but you can also
send us something
on Mastodon.
We're all at
fostodon.org
at mkennedy, at Brian Ocken, and
at Python Bytes. And we check
those regularly. Let's hit it
off. Michael, what do you got for us for the first
topic? I'm going to back
up what you just said, Brian. Okay.
The very first item comes to us from Mario
Munoz. Thank you, Mario. Right on
Mastodon. Awesome. And Mario
says, the Pydantic roadmap looks interesting.
I especially like the combination of analytics and observability.
Looking forward to what the team ends up building.
So the first thing I want to talk about is this thing that Mario referenced, pointed us at.
The Pydantic 2.0 roadmap, or more specifically, Pydantic Incorporated.
So recall Samuel Colvin, excellent guy.
Got to hang out. We both got to
hang out both with Mario and Samuel at PyCon this year, which was fun. And he announced Pydantic
Incorporated, which is a company around building data tools, somewhat around Pydantic and Rust and
those kinds of things for the Python and larger space, the larger developer space.
But it didn't have a ton of details of exactly where they were going.
So this roadmap is two things.
It is a hint on what Identity Inc. is going to be about,
what kind of tools Samuel and team are going to offer.
It is also a call to action to help them choose the right direction so that when they go off building things,
they might build something
that you actually would want to use.
Oh, cool.
Yeah, right.
And so it says, look,
in return for giving us honest feedback,
you have the option to get early access,
get inside the closed beta,
all those things for the platform.
And if you're familiar with Pydantic,
you know it's all about data exchange,
data validation, strong schemas
where there are none and those kinds of things, right? Bringing sanity to your data, as they say. with Pydantic, you know, it's all about data exchange, data validation, strong schemas where
there are none and those kinds of things, right? Bringing sanity to your data, as they say.
So there's two tacks here. Samuel says, well, first, before going into what we might build,
I want to tell you what we're not building. We're not building a new database or query engine.
They're not going to be building or pretending that non-developers or AI can do the job of a
developer, right? They want to accelerate developers' workflows.
So for example, they're going to have CLIs before they have GUIs.
And they're not doing 314 integrations into every conceivable technology, right?
Think Zapier or something like that.
If this, then that.
And finally, they're not going to have an SDK for every language.
They're just focusing on a few languages with Python right up front, I'm sure.
So it says, how can you help?
Well, give us feedback on the five different things that they're considering.
Okay?
Okay.
Number one, this is the one that Mario liked.
Python Analytics and Observability.
A logging and metrics platform with tight integration with Python and Pydantic,
designed to make the data flowing
through your application more readily usable
for both engineering and business analytics.
Right, if you're doing say fast API,
exchanging data right over at Python Bytes,
like all the stuff coming to you
has come through Pydantic classes
because we're using Beanie as the database access layer,
just based on Pydantic if you don't know.
Okay, so that's the analytics and observability.
Another one is a couple angles here around data gateways for object stores.
So think S3, something, you know, Azure blob storage, those kinds of things, digital ocean
spaces.
So gateway for your object store.
So add validation, transformation, and cataloging in front of things like S3 with schemas defined
and Pydantic models and then validated by their Rust service.
Or same idea, but integrate it into your existing data warehouse.
Number four is a schema catalog.
For many, Pydantic already holds the highest fidelity representation of data schemas.
So if you had a schema catalog, it could take that to the next level,
serving as an organization-wide
single source of truth for those schemas.
So if you've got a bunch of different apps or whatever,
especially across language maybe,
languages that talk to certain data stores,
certain APIs,
like might be some kind of central store that says,
this is what it looks like,
and here's how you maybe generate classes to talk to it.
Finally, dashboards and UIs powered by Pydantic Models,
a managed platform to deploy and control dashboards,
auxiliary apps, and internal tools,
where everything from UI components like forms and tables
to database schema would be defined in Python
using Pydantic Models.
So they go into a bunch of details with code samples
of what they actually might look like
if you were to go down one of these paths.
But I'm just going to leave it here and say,
encourage everyone who cares about this
to go participate in Samuel's survey
so that they get the right feedback that they need.
Is all of the above an option?
Because that all sounds great.
Yeah, that sounds pretty good, doesn't it?
Yeah.
Some of these don't really apply to me,
like a schema catalog for the whole company, right?
Like it's me, sometimes me and another developer.
So it's, you know, but if you were in a large organization,
even a handful of people or a couple of software teams,
I think they'll get real valuable.
I think they all look great,
but the data gateway for data warehouses
and for object stores sounds really cool
because, I mean, that's sort of...
Actually, yeah, they all look pretty good.
I was curious.
So you use Piantic now, right?
Mm-hmm.
We're through.
So what happens...
So I know one of the things it does is it filters out stuff that...
Or it sends an error code or something.
If you try to send data and it's not the right type or the right, right kind of data, is that reported somewhere? Or is
that part of the analytics and observability thing? Cause I think that would be analytics
and observability because right now it just appears as an exception. And if you have integration with
something like century or one of them other things, then it would, you know, report it as
an exception with some details, but that's, I don't think that's what they're thinking.
I think they're thinking much more,
even possibly like success data going through.
Oh, yeah.
Yeah.
Like really see how people are using an API.
So using an entry point.
I think that's pretty cool.
Yeah, it sounds pretty cool.
Nice.
Well, over to you.
I'd like to talk about shells.
So out of the web and into talking with your operating system, kind of.
So I want to highlight an article called
The Right Way to Run Shell Commands from Python.
So I guess it's not really necessarily shell commands, but kind of.
So when you're writing, some Python programs have to interact with the operating system for things like file system things or starting other applications and whatnot.
And there's various ways to do that.
But one of the, I guess, I guess that's kind of part of this article is talking about some of these tools.
So there's, it starts off with talking about natively into Python.
So some things that you might not,
when you start having to think I have to interact with the,
with the shell,
you might not have to actually like there's path lib that can,
can do quite a bit for you and you can create temp files and stuff like that
with a temp file package.
And there's a SHU shutil which is i guess
pretty good and and i've never used syslog or or signal but those things are around um okay so
those are those are things built into python so make sure you check out um the things built into
python already um but then there's uh there's a couple other other different modules that might help. The OS module, he's kind of going this backwards,
is probably don't directly reach for the OS module.
But there's a few things in the OS module that are really great,
like to get environmental variables, like get the path variable or something.
You can use OS get env.
And there's a few other things like uh
getting username and stuff um but uh the i guess get you name i don't know what that is
is that username i don't know but anyway uh the um uh so there's a few a few things in the os
module that are interesting that you're probably not looking there um i often if you have used subprocess and this is i guess
a reminder that um with modern python development you if you're using subprocess you probably want
subprocess run even though there's a lot of other uh legacy uh stuff in the subproject subprocess
he open yeah p open for example. Yeah. Yeah. And call,
you probably don't want those.
What you probably want is run,
run is kind of a catch all that works for most things now.
Because I,
I really like doesn't show it in the example,
but there's,
there's options in run to just turn on like encoding.
Here's the encoding bit that says, you know, turn it on.
Capture the standard ends.
Oh yeah, there it is.
Capture output equals true.
Is so that you can capture the output.
That's often what I want to do if I'm running a program
is find out what its output is.
So this is handy.
However, one of the things that I haven't used, this article Martin Hines mentions, there's one right way.
And for his opinion, the right way is use the third-party package, which is a very unsearchable package name called SH.
You don't even want to talk about it so i have no idea if anybody's written about
this because it's really hard to google sh because it's everywhere uh but it's kind of a neat package
um so i uh i looked it up of course and it's um uh tested on all sorts of versions and downloaded a ton. So 3.9 million a month.
Look at the stars, 6.6 thousand stars.
So a fairly popular package.
So most of you probably already know about it.
It's just us, Brian.
We didn't know.
But it's kind of neat.
What it is, is you've got commands that are just kind of look like they did before.
Like ls is sh.ls that are just kind of look like they did before. Like LS is sh dot LS.
That's kind of neat.
And you can pass in arguments.
Uh,
what's,
uh,
some of the others,
like,
um,
I'm going to go over to the documentation.
You've got LS.
You've got like,
uh,
what else?
Oh,
I guess it just has LX examples.
Get,
get,
get right there. That's cool. Anyway, um, find there's aX examples. Git. Yeah, Git's an example.
That's cool.
Anyway, find.
There's a few others.
There's a bunch of others, actually.
It's a pretty big package.
And it isn't a rewriting of all of these things. It's actually talking to your operating system.
So that's the catch.
It's talking to a Unix-like operating system.
So it works on Linux.
It works on Mac.
It will not work on Windows, apparently.
Unless you're using Windows,
Linux subsystem for Windows.
Wait, yeah.
Linux subsystem for Windows.
Maybe.
Or Linux, I guess it is.
Yeah.
Anyway, the embedded Linux
you can run on Windows if you want.
Okay.
Because that's just Ubuntu.
So it's your...
Perfect.
One thing I like,
if you scroll up just a little bit here
so I can point at you on it.
So it says... Actually, it's down on one page. It says One thing I like, if you scroll up just a little bit here so I can point at you on it. So it says,
actually it's down on one page.
It says,
what you can do
is you can say sh.ls
or you can create a command
like any executable you want.
You can just say sh.command
and you give it the path
to the executable.
And then the arguments
can be passed
as if they were
a function call
on that resulting thing.
So instead of like chaining it all together, you could say like create the git command and then you could do a git parenthesis, you know, checkout comma main or prod or whatever.
Right.
That's a pretty cool way to integrate with the command line there.
Yeah, that is pretty neat.
So and that that'll work with even your like, like you said.
So if you look at the next example down right below the ls underscore command.
Yeah.
Yeah.
Custom cmd is what it says.
Yeah.
So your own command, you can have it run something and have the arguments listed.
It's pretty neat.
It'd even be another Python command.
You might think, why would I ever do that in Python?
But, you know, maybe that's coming out of a different virtual environment with some setup that's got a bunch of things
that you're not integrating into your
system. I don't know. There might be reasons.
Or you're using...
So if you're using
click
or what was the typer?
They have built-in test
frameworks, but if you have a different
command line interface that you're testing
against, it might not have a way to
run the commands directly. So you could use this
to run a Python command for testing.
Yeah. Neat.
A couple of live stream
comments, Brian. Michael says,
not Michael, Michael W. Every time I
fall back to OS.system out of habit,
I feel like the old guy measuring his gas
mileage in rods for
hogshead.
I love it.
And then Henry Schreiner out there says there's also Plumbum,
of which he's been a maintainer since 2015, similar to SH,
but he's not really up on them both well enough to give a comparison.
He doesn't know SH that well.
I will check out Plumbum.
Nice.
Cool.
Thanks, guys.
Well, what you got for us?
I think, oh yeah, no, we got one more, don't we?
Got another one.
So over here, I've got...
Or do we want to do an ad?
Well, encourage people to check out the courses
over at TalkMyLandTraining.
Always supports us that way,
including the PyTest course.
Check out the new mobile app that we built
and check out the PyTest book.
Really supporting our work that way is really the best way to support the podcast.
And visiting the sponsors when we have other sponsors.
But I want to talk about buying and selling your data. released by the Office of the Director of National Intelligence, ODNI, which pretty much
how I'm going to refer to them from here on out. ODNI released this, declassified this report
from January 2022. And the headline is, the U.S. says, the United States says, yep,
we're buying your data, including your embarrassing secrets. Digital information
can be purchased from commercial data brokers and de-anonymized to ID the person it is tied to, including U.S. citizens, says the ODNI.
That's a little disturbing.
So when you go to that ad-ridden website that has 29 trackers and 42 ad networks on it, right, They're collecting a bunch of data, but that same network
is on a bunch of other sites and they're pulling all those things together. We have these data
brokers who gather all that information, but also really, really frustrating things where they buy
and sell your credit card data and you don't get to say whether or not you want your credit card
data for sale. I'm pretty sure it was T-Mobile. There's one of the mobile carriers
who was selling your location data
and you didn't get to opt out of it.
Just like, well, you're using your phone, right?
Just so why isn't that for sale?
And all of that stuff gets combined
into like a profile on you, right?
A shadow profile.
And so the news is that the declassified report
here talks about how the US hasS. has been buying large amounts of
this type of commercial information for purposes of spying and other intelligence-related things,
right? And to some degree, I support what the U.S. does with national intelligence. You want them to
keep us safe and things like that. On the other hand, this seems really out of bounds, right? Like I think the report itself even said the declassification of the report prompted
Senator Wyden to call on the U.S. government to rein in unchecked surveillance. And according
to the report, ODNI does not even know which agents are doing this and said if the government
can buy its way around the fourth amendment, the
required must have a reason to search people and their properties due process, then, you know,
what's the point of it, right? So that's basically what this report goes through and talks about.
And yeah, it's not terribly scary, but it's just another reminder that you should be, when you go to a website,
like if you go to say cnn.com or somewhere else and you get a big pop-up, don't you want to
support us? Unblock your ad blocker, right? It's not just about selling the ads, right? It's about,
you know, willingly feeding yourself into surveillance pipelines, into retargeting pipelines that might change
the price you pay for insurance or determine whether or not you're eligible for a mortgage,
not because of what you present, but because of some back channel thing that has been discovered
about you in some way that you didn't intend to, or probably maybe doesn't even make sense, right?
Yeah.
Accidentally clicked a link and now you're marked as something that you didn't necessarily mean to be, right? So anyway,
you can, people can look through this. I just want to encourage folks to like, as they think about
working with ad companies, they think about creating these products, just, you know,
probably less ads, right? Over at Python Bytes, go to one of these. We have our ads right here.
I have like the most intense ad blocking you can get pretty much.
And what do we see right there?
An ad from Influx Data
because we're not retracking you.
We're not targeting you.
You don't see a cookie banner
because there's no cookies, right?
There's no third-party cookies.
And this is certainly possible.
So I encourage people to use browsers
such as Vivaldi or Brave, not Chrome,
that do not track you
as well as NextDNS.io.
I put a link to that in the show notes.
NextDNS, I've spelled that right, which is, this is awesome.
I talked about it before, but like on your mobile phone apps,
so for example, Flipboard is a thing you flip through
when your magazine ads or Apple News,
when you open it up, those are still full of ads,
even if you've got an ad blocker installed on your browser, right?
But once you put this on your local network, then everything has ad blocking built in,
even your mobile apps, which is pretty excellent. That's pretty cool. Yeah.
I highly encourage people with like lots of non-tech savvy people in your household
to turn this on so that people that can be protected. um the only trick is it's a little bit
challenging to turn it off because it's like a router setting for the whole system okay and so
what you can do is you can set up dns over http on your browsers right so that way even if you're
not at home it still works but also i have a second browser a second browser that if i have to turn off that i set it's hdps or dns over hdps to a
non-blocking one so i can turn on the ads with that browser explicitly like to get around this
so i don't have to configure things but it's a tiny bit of a hassle but it's it's super worth it
yeah uh another thing we you talked about ads but there's also uh tracking analytics. So a lot of people are not doing any ads,
but they're just curious about how good their site is working and stuff.
So they turn on Google Analytics or some other analytics.
And a lot of analytics are kind of awful about collecting and selling data.
You might get a little bit of value.
Google gets a lot of value from seeing everybody that goes to your website.
So I do like a lot of people switching to other types of analytics.
Collecting download counts, a lot of times just your host can do that.
You don't need to put that in cookies or anything like that.
Exactly.
Exactly.
That's what we did as well.
I do want to point out one final thing.
I do find it kind of ironic. I don't know really what you do about this in life. So this article is on, Google, email aggressive, fingerprinting,
email invasive, fingerprinting, on and on and on.
It's like, well, okay.
Wow.
As you go to learn about how this is not ideal, you only get 19 trackers put on you.
Yeah.
Yeah.
Okay.
Maybe one final thing here is Daniel points out,
Pi hole DNS ad blocker has a feature
that lets you disable ad blocking
for a period of time.
Interesting.
And so the next DNS thing is like
PyHole as a service, basically.
So they're similar.
Interesting.
Okay.
All right.
Well, on a slightly brighter note, maybe,
let's talk about PyTest.
Yes.
So Frank Wiles wrote an article, uh,
for Rebsys,
um,
uh,
titled pro tip.
Pi test fixtures are magic.
They're not really magic,
but they're kind of,
they kind of look like magic.
They seem like magic.
So,
um,
I,
uh,
I just wanted to highlight this because it was a pretty,
uh,
fixtures are the part of pi test.
That is the brain shift.
So when you get into piTest, understanding fixtures
is the big thing that is difficult to get your head around. So that's why I really appreciate
the article kind of talking through that. And fixtures, if anybody is unfamiliar, you can kind
of think of them like setup and teardown. They run before and after your test. And well, parts of it run after if you set it up. So if you need to,
the now RevSys does a lot of work with Django. So there's this is articles talking about
the idea of like, you to test your like, let's say you have a, it has a, like, it's the hypothetical scenario that you've got a feature where, like, you're testing a workflow where you have, you want your, you need to, you got to have different users, you need to create an owner and then create a user and then have a public repo and a private repo to be able to test your functionality.
And there's a lot of setup and there's often a lot of setup needed for a lot of a lot of software projects.
So fixtures are helpful.
So that's the setup you get.
It's through goes through just talking basically about how to use them. Fixtures are just a function that are decorated with
pytest.fixture and you use it by, in the test, you just call the
function name, the name of the fixture in the parameter
list and it magically just happens for you. And that's the magic part.
One of the things I really like is it kind of goes
into depth of, even more than that, they goes kind of goes into depth of even more than
that they're kind of cool you can compose them fixtures can use other fixtures and you can use
more than one it's kind of neat uh it goes through talking about um uh also uh that uh they can
return things so they can return either just simple data like strings or numbers, but they can also return dictionaries and objects
and instantiated things.
And they can even return a function
that can create things for you.
So that was kind of a neat example.
He returns, he has a fixture called make user
that returns a new user created.
It returns a function that you can call
to create a user with parameters and stuff.
So that's kind of a neat example.
It's like a fixture factory,
factory fixture.
Like, yeah, or yeah,
like an object factory returned as a fixture thing.
So yeah.
Yeah.
And another example with like a make admin fixture
that returns a function that can create an admin user.
So that's kind of neat.
One of the things that was new that I hadn't seen, which is kind of a cool Django project, and each of the different Django applications within the project
have their own tests.
And within those, there's a fixtures file.
You can't use that directly.
This is a trick that they're doing,
is sticking the fixtures in a file called fixtures.
And then at the top level, having a conf test file that imports those, just imports everything out of it. And at first I was like, why wouldn't you, why would you do that? Why don't you just put conf test files there? And his reason, whether you think he's sane or not, um, uh, a sub project or sub get repo or something,
who knows, but at the top level, the top level, you can, you can have access to it. So any test
can access any fixture within any other application that may or may not be a good thing for you, but,
um, but it's kind of a cool idea. Uh, and then talks about how, um, he talks about how plugins,
uh, can have, have fixtures also.
There's the excellent PyTest Django plugin
that has things like DB,
which marks your tests,
that creates the database for you before you start,
and a client that makes it.
I'm learning Django right now,
and I'm using PyTest Django,
and it's pretty awesome.
And then RevSys itself has an extension
called Django Test Plus
which has a thing called TP
and that has
some extra cool
features that aren't out of
the box with PyTest Django.
So that's kind of fun.
And even get requests
within the app.
And test for the response. Kind of like what you would do with requests but inside without actually like within the app. Yeah. Yeah. And test for the response.
Yeah.
A lot of what you would do with requests,
but inside without actually going through the network.
Right.
And it's,
it's very similar to the,
to the unit test framework around the Django built into Django also,
but it's,
and I'm glad that the Django Django test plus and the Django pi test
plugin are pretty consistent with the unit test.
So if you want to switch back and forth, it's not that hard. And as a reminder, you can run
unit test functions you can from pi test also, but why would you the last bit I want to highlight,
and I have reached out to Frank, but I haven't heard anything back. He has an example on auto use. It's just wrong.
So don't take his word for it. The auto use is cool. Auto use makes fixtures just run automatically
before your tests without having to call them out. But it's really hard to come up with a good
toy example for why you'd use it because there aren't very many good examples for why you would
use it. It seems magical at first, and then it suddenly doesn't take long to go, wow, I really should
be careful with that because you should be careful with it. This example shows that a global value
being set with a fixture and that's just not true. It doesn't do that. If you want to get the object,
the return value of a fixture, you have to name the fixture within the test.
That's about it, really.
That's a pretty fun introduction to fixtures.
Yeah, they could fix it up by just having a variable in the module and saying
global and then set its value, right?
Like you would with any other Python function.
Yeah. The other thing I wanted to
point out is he says
tempter is a really cool built-in fixture.
It is, but it's kind of deprecated.
Temp path is what we try to get people to use now because it uses Pathlib.
And Pathlib is awesome.
So anyway.
Indeed, Tony Sherman has been on the same journey and says,
it seems so great, auto use.
At the beginning, things blow up quickly.
Yeah.
And then, Brian, can you open up a website for me
sure we move on as a piece of follow-up for plausible.io so pat decker former co-host uh
co-guest host about a year ago says plausible is the open source option alternative to google
analytics which is gdpr compliant and doesn't set third-party cookies if you scroll down you can see
that somewhere in there cool why did i ask you to it? Why didn't I just open it on my share? Because my
next DNS blocks it like it does everything else until I like clear the DNS out of my web browser,
which is going to, Oh, it finally came back. It took a while, even though I allow listed it so I
could pull it up. But yeah, it's, um, it looks pretty interesting. I had not heard about that.
So thank you, Pat, for that shout out. That certainly seems like, I know nothing about it,
but what I've already learned is it looks like a mega improvement
over the other types of retargeting, feeding,
third-party cookie dropping analytics systems.
So pretty cool.
Thanks. Cool.
Yeah, I have no extras, believe it or not.
You have no extras.
So it's all you.
Okay, well, I got a couple of extras.
I ran across this fun tool or fun contest. The
international obfuscated Python code competition. I know that those existed for C and Pearl,
but I didn't know that we had a Python one. Submissions are due tentatively by August 30th,
and I have no idea about who's running this.
But it looks fun.
Oh, probably the judges.
So Julius, Kevin, Shane, and Anonymous will judge you.
Yeah.
But I'm just curious if...
I know that it's possible to write terrible like terrible Python code, but I'm,
I'm, I'm looking forward to seeing the results. Next up the, there's a quick we've, we talk about
a lot of things that are using rust to speed up parts of Python. So there's a decent article
called porting Python objects to rust. I think it's decent. I haven't walked through it to see if you can actually do this.
But the recommendation here is
if you've got a Python project
that you'd like to replace
all or part of it with Rust,
go slow and port pieces of it at a time.
Iterative porting.
So there's a lot of things
that I've thought about
or cool Python tools
that'd be kind of neat
if part of it
was speeded up with sped up with rust maybe step one learn rust or step one have a podcast where
you convince other people to write it in rust that's right also an option yeah anyway that's
all i got all right cool those are good final um bottle one here is henry points out that scientific python use is possible on their website presumably oh okay okay oh ready for a joke uh well almost
i would like to encourage people to submit uh questions to our um ask me anything uh
to let's see if we have a link for that we do have a link for that? We do have a link for that. And the link is, which, yeah, I was going to mention that and then somehow didn't, didn't I?
It's pythonbyst.fm slash AMA 2023.
I'll put a link in the show notes.
Okay.
Link will be in the show notes.
And it'll look something like this.
Indeed.
And we've got a bunch of great comments and thoughts and very kind messages in there as well.
So much appreciated.
We're going to do are ask me,
ask us anything.
And I think July 11th,
if we can make it work then.
We'll confirm as we get closer,
but that'd be a fun one
for a lot of people to attend live
because they could also ask us stuff.
Yeah, it'll be good.
Sure will.
All right.
Ready for a joke now?
Yes.
So Stack Overflow is pretty awesome, right, Brian?
I mean, it's a huge resource
if you want to find something, right?
You got some kind of problem, especially if it's kind of outside the realm of your usual
expertise.
You're like, ah, I got to work on, get to work on this JavaScript thing.
I don't know how it works.
If I just Google it, maybe someone else had the problem or, you know, something's not
working.
Yeah.
But as a social network, it can be a bit of a rough and tumble place.
Come in here and it has this picture of this of this guy wearing a t-shirt offering like a bouquet
of lavender flowers or something he just picked up off of the, you know, like along the side
during some protests.
And there's these like cops or military folks in like armor.
And he tries to offer it to one of them and says, me asking a question on Stack Overflow.
And then immediately they swarm him and like, you know,
put him in a neck lock and stuff.
It says marked as duplicate.
It's always marked as duplicate.
Yeah.
And that's the easy one.
It can be a brutal place.
Yes, it can.
I find it better as read-only.
Yeah.
Yeah.
But it is one of those handy places that happens to have,
like when you just take your actual error message and Google it,
it often lands in Stack Overflow somewhere.
Yes, it does.
It's often helpful.
If you're willing to take a little abuse.
If you want to get a headlock, yeah.
Yeah, exactly.
Nice. abuse if you want to get a headlock yeah yeah exactly nice i also heard that like recently um
there's been a bunch of uh stack overflow like issue moderators and stuff that reddit oh was
it reddit reddit blackout yeah um so the ceo we got the guy's name the ceo of reddit decided that
they were going to monetize the API of Reddit because like Twitter did a
little bit, Twitter wanted to kill off the third party clients just to make them go away. So they
had more control, right? That was sort of one of the things that happened when us took over.
So they didn't quite want to do that. They wanted to charge money for the API because they're not
showing ads for the mobile apps. And Apollo was the mobile app that was most is, I guess, maybe
was more accurate, was most popular. And in order for that app that was most is I guess maybe was more accurate was
most popular and in order for that app to keep running I think they have to pay 20 million
dollars a year in API fee call fees so they're like well we don't make that much money we're
shutting down and so they're effectively killed off all the third-party clients which set off a
a protest and the protest manifested in that people who are moderating popular reddit areas
sub subreddits mark them all as private to say you know we're taking our content our contributions
of we put into reddit off as a way of protesting what you're doing to the community to like close
it down and you know extract money from it basically basically. Yeah, but also Stack Overflow. So Stack Overflow
is, that was six months ago,
is
blocked
because people,
obviously, I think everybody on our
that's listening here knows what Stack Overflow is,
but people are taking the questions and
just going and pasting them in chat
GPT, getting the answer and putting them
back into Stack Overflow, that's lame.
What even?
So apparently that's blocked.
Yeah. Cool. Well, I
sure had fun talking with you today and talking
with everybody and
just excited
about the future of not
using AI for my software.
Thanks, Michael. I have to go back to writing to myself
as well. Yeah. Thanks as always, Brian.
Bye.