Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to
your earbuds. This is episode 284, recorded May 17th, 2022. I'm Michael Kennedy.
And I am Brian Okken.
And I'm Daniel Mulkey.
Daniel, great to have you here.
Thank you. It's an honor.
Yeah, it's an honor to have you. Now, before we get into our first topic that Brian's going to
tell us about, just give us a bit of your background.
Sure. I am an optical engineer in Southern California,
but I have a significant amount of my time spent using Python for data analysis,
instrument control, and other things. So I've been doing it for a better part of the last five
years. And I've had a back and forth relationship with MATLAB and have finally married to Python,
so to speak.
Fantastic. You've finally been able to get out of your dysfunctional relationship with MATLAB.
Yes, exactly.
It sounds a little bit like you might live in a parallel universe to Brian.
Yeah, it sounds like it. We should definitely get you on testing code.
We can BS about that.
Sure. Yeah, I'd love to.
Brian, I would love to hear about our first topic. You want to talk about it?
It sounds very distinct, you know?
Distinctify. Yes, very distinct. So I ran across this. I can't remember how I ran across it. I guess
it doesn't matter. But one of the things I like, it's a Python package called Distinctify.
And it's very simple. It's a lightweight Python package to provide functions to generate colors
that are visually distinct from one another. So I was thinking like, you know, you got a chart,
like maybe you're taking user data or something, and you don't know how many lines you're going to plot,
but you're going to plot a whole bunch of lines. How do you pick the colors for what the lines are?
So this is a kind of a neat thing to just pick visually distinct colors. Pretty focused,
but it's pretty cool. And all you do is you kind of just give it, you give it like the number of
colors you want, and it gives you back the colors. And you can, it has display capabilities. So
you have to install extra stuff to make that happen. But you can display color swatches too
with it. And I was looking at some of the different colors that are available. Like one of the ones was
15 different colors. I think it's 15 colors for normal vision versus some color blindness. So if you
have colorblind people, you can pick based on some of that stuff. There's a whole bunch of examples in
the repo too, that it's kind of fun to look at. One of them was the like the normal colorblind one.
So was that it? No, that wasn't it. But there's some really cool examples of different colors. So if you just
give it a few, it just grabs a few, of course, but there's a whole bunch of neat ones, clusters and things.
So anyway, yeah, cool little library. It's great. Yeah, I like that they have, I noticed when I was looking
through it, they have a function for generating a color palette. And so you can generate a colorblind
friendly palette. So hypothetically, that works well for visual colorblind. And if it's in print and you're doing
black and white, so that was the most interesting thing to me. Oh, do you mean it has black and white?
That's interesting. Well, at least I think if you take a colorblind
palette and you make it black and white, typically it's still a decent contrast. Oh, yeah. So you have to like worry about
printing things out. Oh, that's cool. Yeah, that's great. And one of its functions
is to take the color map that it generates and turn that into
a matplotlib. Oh, yeah, yeah, yeah. It's cool.
Oh, that's what I was looking for.
Yeah.
Oh, wow.
And there's somebody in the audience who just found out they're colorblind.
Yeah, go ahead, Daniel.
And there's somebody in the audience who just found out they're colorblind.
They're like, is there a difference? What is this?
So my, I, yeah, one of my kids found out like in high school that they were colorblind.
So interesting.
Yeah. How would you know?
Yeah.
For a long time, you're just like, people tell me that's a color. I guess I'm not great at picking
out that color or something.
She had an art teacher said, I really love how you use both blues and greens in the sky.
And she was like, I intended to just use blue, but thanks.
I have a friend who went to art school and that was essentially his story that he always had really
vivid color choices because he didn't see the same as everybody else.
It was great. It was awesome.
That's pretty cool.
Yeah.
Cool. All right.
Ron, we ready for the next one?
Definitely.
Okay. So let's talk about SQL Soda or Soda SQL. So this is a open source CLI tool that if you're
doing like ETL, like ingest, transform loads type of stuff, doing other sort of analysis or
exploration of SQL data, it allows you to connect to your data source, like your database, and then
define tests for what invalid data looks like, right? Does this have to be a number? Can it,
does it just have to be not null? You know, what is it? So for an example, here, they're talking about,
here's the YAML file for a, like a warehouse, a data warehouse reporting type thing for Postgres.
So you just set up like your connection and your host and, and all that kind of stuff. And then
off it goes. So pretty neat. And then you can scan your data set to run tests against your data.
Isn't that cool?
That's right. It's Soda cool.
It's Soda cool. It is Soda cool.
Yeah. So you just say Soda scan and you give it the YAML file for the connection information and then a YAML
file for the types of things you want to test. So they've got this example of how you're talking to
one of the data warehouses and it's going and pulling in these config files. And it basically,
this example, it's testing 54 different conditions. Three tests were executed. Everything's good to go.
So, you know, if you're getting kind of data dropped on you or you're scanning, you know,
scraping data from other places on some kind of background job and you want to bring it in,
you know, if it's all automated, how do you know when it goes wrong? Right. So here's a nice,
simple way to express that.
Yeah. That's neat.
Yeah. And Brandon out in the audience says, I think we're looking at great expectations for this same
thing. And yeah, this is kind of a, I guess my, my first impression is this is a less code
way of doing what great expectations does. Right. So like you can just put together some YAML files
that define, you know, what you want to test for. Right. So for example, in this YAML file,
I can say the metrics are row count, missing count and missing percentage. And then I can test that the
row count is greater than zero. Right. And then the, another one is for the column, for the ID,
it's a UUID that it's, I'm allowing 0% of the UUID format to be invalid. Right. You know,
that's got like a certain structure to it. Right. It's like a, either a straight UUID or a string
that looks, that can be parsable over to one, I'm guessing something like that. So pretty cool. I
think that's probably the biggest difference. So if you just want to define kind of like declaratively,
like here are the conditions of which I want it to test. And then you want to just set it up to
continuously scan it. Looks good. The invalid percentage looks interesting because,
it's, it's an interesting addition of like, you know, there can be some bad rows, but we don't
want more than like 20% bad rows or something like that. Right. Right. Maybe you can't have zero
errors, right? Like you just, sometimes the data is just not there, but if it's a hundred percent not
there, then something's gotten terribly wrong or the data formats change and it's not called that
anymore or whatever in JSON, who knows? Daniel, what do you think? My, my data is always in CSV
files. So I have, I guess there are pros and cons to never having touch SQL, as I've heard
much, much easier to version control. Just put the CSV. Yeah. Anyway, I think, this one's pretty
neat. People can check it out if they're doing relational data stuff and they, especially if you're
doing a lot of like on demand, you know, not like you ask for it, but it's just on demand
processing or you're given a database and you want to check it out to see how it's, how it's doing.
So I won't go on anymore on that because I've got a ton of other extras. So kick it over to you,
Daniel. Cool. So let's see. There was a review article back in 2020 published in the research
journal nature, for anyone not in the research articles world, nature is one of the top level ones
for referencing grad school. We had some fancy work we did with quantum entanglement and we got rejected
by a sub journal of nature. So to get anything into nature is highly non-trivial. I will add the,
it's like the JAMA, the journal of American medical association of science. Basically it's absolutely one of
the top ones. I will say it's a review article. so it's easier typically to get a review article
than to say, Hey, this is bleeding edge research. It's going to change the world, but still the big
news is two things. One that there's a article by Travis elephant and others on array programming with
NumPy in nature. it's a big enough deal that they chose to publish this and it got through.
And it's, I think very significant that that software was something that was good enough to
publish. the other, and you know, they go through and they talk about kind of the fundamentals
of it all. There's one diagram I really like that sort of shows how the whole ecosystem stacks up.
You've got numbers. Oh yeah. That's a cool visualization. Yeah. And then you got scipy and
matplotlib and you know, the other plotting libraries. So there's the foundation. Yeah.
I was just going to say for people who are listening, it's like the tree of life for scientific libraries.
Sorry. Go on, Daniel. Yeah, that's absolutely right. So from that foundation, as far as algorithms
and plots, you go up to like specific method you're using, are you doing image processing?
Are you doing machine learning or something else? And off to domain specifics like AstroPy. And I think
you've had those guys on Python. So you've gotten to talk to them and then down to very
application specific. So it, you know, NumPy serving almost everybody who does anything numerical down
to like Q-tip, which is used for people working on quantum computers. So very large breadth being
discussed here. Q-tip. That's so cute. I like it. and yeah, so it's notable that Python got into
nature. And if you go search for Python, there are a lot of other articles, but it's also interesting
to see that they're willing to publish software. You guys have talked in the past about how you can't
always publish the software package and any research journal. So how do you get credit for that if you're
in academia? but this is an interesting take to see that nature goes to publish it.
Yeah, this is super interesting. And I think it's, it's very valuable to just raise awareness,
right? It's, you know, this is the water that we swim in, but not everyone. Everyone is immersed in
the Python data science tooling, right? Yeah. There's a lot of authors on here.
Yeah. I was trying to understand. I'm guessing those are the maintainers of the packages that
were included, but I mean, you, you don't have 20 people write one paper, so I don't know how,
I think it's, it's kind of like the LIGO papers or like the gravitational wave interferometer ones
where like this crazy list. It's like the first page of the article is almost all authors just
because there's so many people that worked on this for so long. So I'm guessing that's
yeah. And you can access it. Some, some, articles, some journals, you can't actually read
it unless you have a subscription, but this one's available. So.
Indeed. Yeah. A very cool pick before we move on. Maybe, you know, Daniel Alvaro and audience
has have any of you come across a way to validate pandas data frames against a schema, much like SQL,
uh, soda, soda, soda, my scope. I feel like we have, but I don't remember, but yeah, I don't
remember either. Sorry. Maybe something we should seek out for the next one. And I think we might
get some answers in the audience. So we'll, we'll let them, inform us as we move on. So Brian,
what's next? well, this isn't Python specific, but I think a lot of Python people are using
GitHub actions. so, GitHub announced, I guess recently, supercharging GitHub
actions with job summaries. That's an article that we'll link to. And, basically the, it's pretty,
it's pretty cool. I can't wait to try this. I'm using GitHub actions. And, the gist is you can
now have Markdown go directly into your GitHub job summary sort of thing with like this,
this crazy, global variable called GitHub step summary. but it, it's got marked out to it.
And I'm like, well, what can you do with this though? But, Simon Willison, released,
was, was tweeting about it. And, and then said, and then Ned Batchelder said, Hey, I'm using it too.
So Ned, has a little example on his, on coverage.py that shows, what does it show?
It shows, you, you get this nice total coverage percentage. If you want to put that
in your, in the coverage for your, your, your repo, you can do that. Interesting that
coverage.py is not a hundred percent covered. I don't know why I find that funny.
The irony. I love it. but, and then, so Simon also listed, data set is,
uh, has an example on data set, you doing, adding some extra stuff, to, to,
what is he adding changed files? Oh, he's got a, a tool that does, looks for,
how many files have changed and, and recently. And he actually just wrote, he just wrote a
write write up for that. So we're linked to that as well. So GitHub action job summaries,
and he shows how it, how it works. You can pop, pop out stuff. And I love Markdown.
So even little code fences and all sorts of stuff. That's very cool. If you want to structure something
real nice like that. Yeah. It even has, so, so supposedly it's got a whole bunch of stuff.
It's got like, you can do tables even. So that's neat. And emojis. Why not? So,
Oh yeah. Pretty cool. Put a little fire emoji in there. Yes. Do it. Does anybody get images?
Like if you create an image during the action, can you reference it? I do. I don't know.
Didn't doesn't mention images, but maybe you could base 64 and code it and embed it as a data.
Oh, wow. It even does a mermaid, which is a way to do diagrams, within it. That's pretty neat.
Very nice. Like flow charts. Yeah. Fantastic. This is a good one. I need to learn to do more
with GitHub actions. I don't do very much with them. I love them. They're like, it was, I used to use
Travis back in the day, but, and, I think these are way easier. So, you know, do you do any of
those sorts of things? Any, CI automation type stuff? at a previous company, we used Azure DevOps
and set up some stuff to build packages and build applications, but, not at the moment. It's just,
it doesn't, it doesn't happen to be any code bases I have, but I need that.
Yeah. Very cool. All right. Well, I've got an interesting one here. I want to dive into it,
you guys. So this one, let me give some attribution here. This one was sent over by
Antomar, from meta. And then this is a writeup by Alex way good. And what it is, is it's the,
basically the, the notes for all of us who are not there for the 2022 Python language summit.
So that's pretty cool. There were around 30 core developers, triagers, and special guests gathered
the day before PyCon. And so they, they had a bunch of different talks and ideas they discussed
quick summary. Really it's about so much of this is about performance and parallelism right now.
And then there's a lot of maintainability back channels, back flows here. All right. So
coming to these first, Sam Gill made a huge splash last year when he talked and he introduced the no
Gill work that they had done for, I thought I'm three, eight, I believe. I can't remember three,
three, nine. No, it was three, nine for them. Cinder was three. So for three, nine, and there's a lot of
interesting optimizations and whatnot in that talk. So the idea is, could we live without a
global interpreter lock? Larry Hastings tried the galectomy, sort of said, you know, it's too much
of a penalty to try to live without it. But this no GIL work that Sam Gross did actually had very small
overhead in terms of what it added, but potentially removed some of the GIL things. So there's a lot of
analysis of that. People were excited, but they, how is it written? It says robust, there was robust
questioning. One, I guess one of the biggest parts that they discussed was maybe this should be a fork
of CPython. There should be a no GIL version of Python. And, but Sam is like, I really don't want to
have just another separate version of Python. I really want this to just help everyone. So pretty
interesting. I think originally it was maybe going to be a runtime flag you could pass to Python,
but it's looking like it more likely is going to turn out to be a compiler flag. So you'd have to have
a no GIL build, even though it's from the same source code. So yeah, a bunch of interesting things,
concerns about how it's going to work with like C libraries and so on. But that's, there's,
all these are pretty interesting read-ups, reads, write-ups. So Eric Snow did a presentation on his
per interpreter Gill, which is interesting in how it approaches a slightly different problem
than say Sam Gross. So Sam is trying to get it out of Python. Eric is saying, well, if we could just
have a sub interpreter, like a little mini in-process interpreter that runs per thread, then they can all
Gill to their heart's content. It doesn't matter because it's all single threaded, right?
But what's interesting is if you go look at this one in here, we've got this one. It says something
like way back in 1997, this idea of multiple sub interpreters was added by Guido, but it really
hasn't, nothing has been done with it. And when somebody tries to do stuff with it, there were
thousands of global variables. And if you're going to have per interpreters, you have to somehow have
those not shared because then you're going to have the GIL back on them, right? You have that locking.
So due partly to the
deprecation of some of the old libraries
and stuff, it's gotten a little simpler, but
no, that was it for the next write-up. But anyway, they reduced this to almost
1,000, to 1,200
remaining globals.
So needless to say, it is not
totally
solved here, right?
So again, one of the possible worries of all this stuff is, well, how are the C extensions going to deal with this?
Like they don't know about multiple sub interpreters.
Yeah. So anyway, that's another one of the main threads going on there.
Let's see.
Then this is probably the biggest deal.
This is Faster CPython 3.12 and Beyond by Mark Shannon and Guido Van Rossum.
So stepping back, a release.
Python 3.11, if you haven't heard,
is fast. It's supposed to be
1.25 times faster than 3.10.
How about that?
Yikes.
This blows me away. In one year, they were able to make Python
1.25x
faster, and it's been out for
30 years. It's not like, oh, well, we released it
last year, and now we've learned some things.
It's really, really, really
solidified in the way that it
is, and then still, there's a lot of work.
And this apparently is just the beginning.
This is like a five-year plan to
add all sorts of optimizing
JIT compilers and all
sorts of things.
How did they quantify that, or what
subset of the language was I tested on?
That's the tricky thing to say.
Python is 25% faster.
Doesn't matter what you do. Even if you're just waiting
on a database, it's still 25% faster.
Does it just overclock your computer in the background?
It liquid cools it.
I believe that number comes from
the unit tests,
like all the tests for CPython.
I'm not 100% sure, but I believe
that was the conversation.
And so one of the big things coming is
possibly a JIT, an optimizing
JIT compiler. So right now, they've
found a way to optimize
individual bytecode instructions
to make the runtime
smarter and go, oh, I see what you're trying to do.
We could have a specialized version
of that. But that's
on a per line basis. Like, how about
inlining this method? Because I only see it
called in two places or
something like that, right? So you need something that
can look more broadly at the code. So that's this idea
of the JIT compiler and
so on. So yeah, this is really
good. But all three of these things I've talked about
are like, both,
they might help each other, but they also might
inhibit each other, right? So like the
no-gil work might interfere
with some of the optimizations that they're doing
over here and the multiple sub-
interpreters also might
be some interplay that they've got to be
got to be worked out. So I'll just summarize the rest.
WebAssembly. And
so we've talked about
PyScript last time and
Pyodide.
Pyodide. This is the
official CPython
build target
for just
CPython. So this is really
interesting. That is sort of a more from the core
devs rather than somebody coercing
CPython into a different build
on their own. So that's pretty neat.
F-strings. Apparently the F-string
parser is kind of this weird
side parser thing that's not actually
part of the Python code
parser. But now we have peg,
the peg parser. It can support more of this.
and sort of unify that.
So yeah,
there's something like
1,400 lines of customized
C code for parsing F-string.
Well, the people who wrote it
knew. They did a lot of work.
There's like 600 of the global
variables right there.
Exactly.
The most important
1,400 lines in all of Python
right now. They have string functionality.
Then two of the big
optimizations from sender.
That's the Python 3.8
specialization from meta.
One is, this is a
presentation by
Itmar Osterreicher.
So this is the
person who sent this in actually.
This is
looking at
async methods.
And if you can be sure
it's not actually going to await,
treat it like a regular method.
So, you know,
if you have an async method,
you might say,
do this,
do this.
If I already have the value
in the cache,
return,
else await database call,
right?
If you already have it in the cache,
why do you need to
create a co-routine,
schedule it on the back,
on the loop,
wait for the loop to get to it,
and then return?
Just boot.
Just call it.
Like a regular method,
just give us the answer.
That's the idea.
There's some
interesting ideas
that it might change
runtime ordering,
although I don't know
there was any promises
of runtime ordering,
but yeah.
So that one's interesting.
Also,
the issue and PR backlog,
now that we've moved to GitHub,
apparently,
there are issues
that are still 20 years old
that are still open.
And traditionally,
the core devs
and the triagers
and so on
have approached
these things like,
well,
should we close this
or probably we need
to keep it open
because it's important
for historical reasons.
And they're starting
to talk about like,
this is not helpful
for anyone.
Maybe our first question
is like,
why should we keep this open?
And if the answer
is not clear,
just close it.
There's a lot of talk
about,
well,
this historical stuff
and maybe someone
wants to pick it up.
If it were me,
if I got to pick
and obviously I don't,
so it doesn't really matter,
I would just go,
if it's older than two years,
just close it.
Like there's a script
that just says,
over in two years,
select all,
close.
Now let's go through
and figure it out
because at some point,
you know,
if you've got 20 years
of you should make this change,
maybe even,
maybe these,
these things aren't even
relevant anymore,
you know,
or things have moved beyond it
or it doesn't make sense
in 2022.
I don't know.
But I'm just,
mostly what I got out
of the articles,
I'm thankful that I don't
have to deal with 20 years
of issues and PRs.
But also,
they don't go away
if you close them.
They're still there
if people really want
to see them.
You can,
so I think they should be,
maybe two years
might be a little extreme,
but at the very least
five or three
or something like that.
There should be a number
where that's true
and that number
should be less than 30.
And it's,
and it's a smaller number
than 20,
right?
So,
yeah.
All right.
This is a long section.
Last thing,
I'll close it out with this.
Immortal objects,
the path forward
for immortal objects.
So let me ask you guys this.
Can you change none
or true or false?
No, right?
Does,
do you think it's ever
going to go away?
Like,
are we done using true
and then it's just
going to get garbage collected
or reference counted
out of memory?
Nope.
But you know what?
Every time you interact
with true and false,
it's still incrementing
its ref count.
Interesting.
And none
and stuff
because it's an object,
right?
Oh, yeah.
And so,
this discussion is like,
isn't there some
that just shouldn't
be participating
in reference counting
because they're,
they're just fundamental
to,
you know,
like the idea
of a class,
like the,
the structure
of a thing
that defines
what a class is,
true,
false,
the numbers,
like the low numbers,
like there should be
some that are
not consuming
that memory
because they don't
need to keep track
of that section
and so on.
Right.
So anyway,
this was the proposal.
Again,
it's complicated
is the story,
but yeah,
I do something
a little bit like this
on Talk Python,
the training site.
So I've done a lot
to tweak the garbage
collection around there
and really change
the,
the defaults
of like,
what are the triggers
for garbage collection?
So if I've got
this many allocations
and so on,
and one of the things
you can do
is you can tell it
from here on,
like what has existed
up until now,
freeze that
and don't,
don't look at it
when you have to
look for cycles.
Right.
So I just,
in my app startup
when it's a,
it's kind of
imported the things
and it's about to start,
it just says,
okay,
everything that you've done
to come to life,
just don't,
don't trick that anymore.
Anything else I make
from here on out,
please clean that up.
And it,
it seems to,
it's kind of a super cheap,
cheap overs,
version,
but you still get
reference counting,
right?
Yeah,
that's definitely
an optimization
that I think is worth it
for some of these
immortal objects.
Why not?
Yeah.
I mean,
we shouldn't be
reference counting on none.
That's kind of weird.
Unless,
unless it slows things down
by having like some.
It does.
That's the thing
that's crazy.
So over here,
they're like,
all right,
here's the deal.
we,
we shouldn't,
we shouldn't have to worry
about this.
And so,
where was it?
Except it adds an if statement
to everything,
right?
Yeah.
It says the naive implementation
of this makes it 6% slower,
not faster.
Like,
oh no.
It makes sense.
Yeah.
And we think we can make it
only 2% slower.
It's going to be slower though.
Yeah.
Well,
the thing is,
normally you would just
reference count it.
You just go none
plus equals one,
right?
Or plus plus,
minus minus.
But here you're like,
you have to have a test.
Like,
if it's an immortal object,
do this,
else do that.
And it's just like
that bit in the hot loop
of the runtime
is just apparently overhead,
you know?
Yeah,
for everything.
So everything you reference
has to check to see
whether or not
it's an immortal object.
before it does
the reference counting.
So.
Yeah.
Maybe it has a NOAA method on it.
I don't know.
I think it probably works
straight on the field though.
All right.
Much like Highlander,
Alvaro says,
there can only be one none.
All right.
Well.
Straight off.
Yeah.
This is definitely
an interesting trade off.
All right.
Well,
I think that's more than enough
for the language writer.
But it was really cool
that Alex wrote that up
and NMR sent it in
because that's a good insight
to what's next.
Cool.
So,
it's my turn,
right?
Given that.
Sorry.
So,
yes,
you're good.
Go,
Daniel.
Cool.
So,
people in the software community
are blessed with many options
for doing source control.
You know,
you've got get SVN,
Mercurial,
other historical ones
that maybe aren't as well used,
but optical engineers,
mechanical engineers,
electrical engineers,
everybody else doesn't have it
nearly as good
as the software community.
So,
anytime I see an option
for that,
it definitely sticks out
in my mind.
So,
I don't remember
how I found this,
but came upon Allspice
fairly recently,
which is Git
for people
who are doing circuits.
This is cool.
And so,
it has,
it looks exactly like Git.
You've got version control,
you've got all the things
you expect to have.
It's compatible
with some of the common
electrical design programs,
but it really just
gives you the ability
to do all these sorts of things
that you take for granted
if you're in a
sophisticated workflow
like software,
but that you wish dearly
you had for any other discipline.
So,
when you put something
in a source control
and you diff it,
what do you get?
They have...
Are you diffing graphics?
Are you diffing
some sort of definition file
that defines the circuit?
So,
they have,
you know,
one of the first things
they have is a diff tool
because they know
that that's kind of
one of the big questions,
right?
Is how do you compare
the schematics?
So,
they have a way
to do it visually
and you can look
at all the changes
and it looks like,
you know,
they're highlighting
each commit
to whatever change
was made on the schematic.
Oh,
that's cool.
Yeah.
Oh,
that is very cool.
Yeah.
So,
one potential question
would be,
well,
great.
You know,
it's nice that you can
do that on the internet,
but I work at a commercial
company that doesn't
want to do that.
But they do have
both,
what they have a,
they have self-hosting
and they have a
government cloud version
if you're subject
to things like
ITAR,
EAR.
So,
you can,
in the same sense,
the Git has an enterprise
option,
Allspice also has an enterprise
option.
like an on-prem,
self-hosted version.
Yeah.
So,
you don't have to give away
your secrets.
Yes.
But I have no personal
experience with it,
but it's very promising
and exciting to see
somebody trying to come up
with better ways
to do engineering work
besides just software.
You can even configure
it to integrate with
Tortoise Git,
like the Windows Explorer
right-click type of Git.
Yeah.
So,
exciting stuff.
hopefully somebody
helps out the Mechies
and the optical engineers
as well one day.
Yeah,
I mean,
there's always large
file support,
but the diff is terrible,
right?
So,
usually.
Yeah,
you're looking at
binary files or stuff
that's,
yeah,
humans are so good
at processing images
that if you have a visual
comparison that that's
orders of magnitude
better than trying
to look at lines
of your,
even if it is a plain text
file that you can read
through.
Yeah,
definitely.
Yeah.
Here's your XML
with its namespaces.
Good luck.
What?
What does this mean?
Yeah.
Well,
cool.
I like it.
All right.
I do too.
Brian,
you got any extras for us?
I,
yeah,
actually.
So,
I've been busy.
I've been,
kind of like this back
stream of test and
code episodes.
So,
the most recent one
is that I,
put out was with
Will McCoogan.
We're talking about
rich and textual
and textualized.
It's really fun,
really fun one.
But,
actually,
so,
since we talked
last Tuesday,
I've got four extra
episodes that have
come out.
So,
we've got teaching,
including testing
with web front-end
stuff,
which was,
it was kind of
an interesting story
about,
like,
basically,
if you're college-level
students,
but they're new to
coding,
when do you include
testing?
And,
and,
the
Carl says,
right away,
why not?
So,
also,
developer and
productivity episode,
I think that's,
oh,
yeah,
and a Python,
Django,
rich and
testing article,
so,
or episode,
so,
lots of goodness
over on testing
code.
they have a Django
rich package,
apparently.
Yeah,
that,
that was just
for other,
like,
the CLI,
the Django,
CLI stuff,
including rich with
that,
which was great,
but they've
incorporated,
incorporated the,
that into the
test runner,
so the,
the Django test
runner can do
rich tracebacks,
which is pretty
cool.
Perfect.
So,
how do you know
you got anything
else you want to
give a quick shout?
Sorry.
Sure.
So,
you know,
Adafruit's a well-known
company for doing
maker electronics
and,
oh yeah,
I don't have the
links up,
sorry.
But,
you know,
Adafruit's well-known
and they do a good
job of focusing at
the first five-minute
experience of getting
you up to speed with
something on electronics.
But there are other
companies that do the
same thing as well,
so I was going to
shout out SparkFun,
Seed Studio,
and then other
companies like OpenMV,
who has a focus on
machine vision.
And they're less
geared more for the
people at the entry
level,
so maybe if you're a
little more comfortable
with certain things
or a little more
comfortable,
you know,
exploring those
based on your own,
they could be good
options.
Right.
More specialized,
maybe,
for people who are
trying to actually
build.
Or if you go to,
yeah,
if you go to Adafruit
and what you want
is out of stock,
you can check some
other places too.
Which,
unfortunately,
happens a lot
these days.
It's,
yeah,
those things come and
go.
A lot of demand.
Awesome.
All right,
I do have some.
Cool.
Yeah,
that's right.
I do have some
extra ones,
but I kind of got a
lot,
so.
All right,
let's see.
I'll go last.
All right,
the first one is,
I always love a good
documentary on tech
stuff,
and sometimes these
are super cheesy,
but there's a
documentary called
Power On,
The Story of Xbox,
which is a four-hour
video,
which you can watch
on YouTube,
which I'll link
directly to the
YouTube video.
And it's really
good.
It's really
interesting.
Whether you love
or hate the Xbox,
I honestly don't
care that much one
way or the other,
but it's just
an interesting
sort of view of
like the last 20
years of technology
from the sort of
the gaming side.
So if people are
looking for something
to watch and they
want to spend four
hours doing it or
spread it out,
you know,
they can check this
out.
All right,
speaking of videos,
not that one.
This one,
I took,
so recently I
released my Git
course on sort of
a pragmatic
introduction to Git
and I decided I
wanted to share
one part of it
with a broader
world.
So I released a
video called
The Four Reasons
to Branch with Git
and I put that on
YouTube and people
can check that out.
So it's like an
hour long video I
posted this week.
And then this one
comes to us from
Jason Perkore saying,
how cool is it to
see Python showing
up like right on
the front page of
various places?
So there's this
place called
EasyPost,
easypost.com,
which allows you
to like do labels
and track your
labels and stuff.
But if you just
scroll down just a
little bit,
it says,
you know what,
why don't you
just either buy
labels or you can
just use this
Python API right
here.
And it doesn't
even sort of,
if your developers
click to reveal the
secret,
you know,
it's just like,
no,
here's your Python
code for our
company.
So just kind of a
cool little thing
for that.
Let's see.
Brian Skin
pointed out that
the Stack
Overflow 2022
developer survey is
open for accepting
comments.
comments,
which is cool.
And I'm going to
put this up here
on the screen
first.
So Brian,
do you see this?
It has all of
this stuff.
I can't,
if I click it,
it'll just go away
and like,
this is an image,
right?
Right here.
Yeah.
What if I wanted
that as text?
What if I wanted
to somehow grab
that?
So I've got this
app,
which I'm going
to tell you all
about next,
um,
called Text
Sniper.
Watch this.
So you can't
quite see if I
just drag over
that,
just like you
would a
screenshot.
And then let's
see,
um,
I need somewhere
I can paste
this anywhere
there.
So what I got
out of that
is check this
out.
Oh,
wow.
Isn't that cool?
Yeah.
I just control
seed from like
the picture
on my,
uh,
on my screen.
and it can do
PDFs.
It can do
screenshots.
Like,
so for example,
if you're watching
a video presentation
and you see a
slide,
you're like,
oh,
I want to capture
those bullet
points or that
grab it.
You got it.
So that is
called Text
Sniper,
which is super
neat.
All it does,
it's just like
the select
region for
screenshot.
That's great.
And then boom,
what it doesn't
matter what's under
it.
It's just,
if it's texted,
OCR is it,
and then you got
it.
Yeah.
So often like
a small restaurant
will put their
address or their
phone number
like in an image.
Like,
come on,
I gotta click
on that sucker.
I want to put,
just drop this,
paste it into maps
or something.
That's right.
So I don't know.
I think for doing
research,
if you're like
watching videos,
you want to get
something out of
something that's
on the screen,
like a slide or
whatever.
This is,
this is pretty
awesome.
And it,
it costs something
like $11 once.
So it's,
you know,
if it's useful to
you,
it'll be worth it.
If not,
then,
you know,
it's not,
it's gotta be worth
$11 or zero to
you.
That was like a
good OCR app.
Yeah.
And it's just the,
the ease of use,
right?
Not take a screenshot
and go find your
app.
It's just like slap,
slap drop.
Okay.
so last one of my
extras,
Sam Lowe and
Philip Guo sent
over,
allow Sam Lowe,
sorry.
And then sent
over that.
I had them on to
talk about pandas
tutor and they were
talking about the
challenges of running
pandas tutor on the
server side and
letting people run
code,
but it's pretty
limited because you
don't want them to
hack the various
things.
You don't want to
keep it pretty
limited.
So they don't take
advantage of like
your compute
resources.
So now they just
posted a message
saying pandas tutor.
If you go over
here and say,
visualize your
code,
it'll go and do
all these cool
visualizations.
I know we've
spoken about this
before,
but notice what it
says here.
I can scroll a
little.
It says initializing
high iodide on
WASM download
pandas running
boom.
And so all of
this is running
in client side
Python,
which is just,
yeah.
So we talked
about that being
one of the topics
of the language
summit,
the WASM
support.
And here you
have it in
action.
So I said on
the show,
like,
hey,
if you guys
consider this,
like,
yeah,
maybe we
should.
And then like,
this turns out
to be a great
idea.
That's pretty
cool.
Like the messages
run code on the
server.
That's slower.
We just recommend
you run it here.
Nice.
All right.
That's pretty neat.
Well done,
you guys.
And that's it for
my extras as well.
That's a lot more
real than I thought.
I guess I thought
pyro died and Web
assembly were a little
bit further off,
but that's like,
hey,
there's an application
right now doing
that today.
Yeah.
The Brian,
the anti-gravity
high script thing
you showed last
week was so cool.
Yeah.
I didn't even know
it was doing that
before we showed it,
but it's pretty neat.
Yeah.
a lot of the
interactions are
super.
They're getting
starting to be
real hour.
We're getting
there,
Daniel.
We're getting
there.
All right.
How about a joke
to wrap it up?
Definitely.
So we've all
been in,
well,
maybe we haven't
all been,
we can all
imagine being
in awkward
situations,
maybe on a
weird date.
So I don't
go on dates
really being
married for a
long time,
but imagine,
imagine that you
had,
here's a
graphic of a
woman who's
on a date,
like maybe
just woke up
in the morning
after the first
day,
first time
together sort
of thing.
And the guy
who's like
sculpted,
right?
He's like
clearly like a
super fake,
probably good
looking guy,
whatever.
But he's in
the shower and
she's like
flipping through
his phone and
says,
when she looks
through your
phone,
but all she
can find is
fork a child
and kill it.
Google search
for a kill
child and fork
parent,
kill parent
with fork,
kill parent
without killing
child.
kill child
without killing
grandchild.
And she's got
this face of
like,
oh,
what's that?
Sorry.
Those are
great.
Yeah,
she's got
this look like
I thought it
was going so
well and he's
a murderer.
I can't believe
it.
No,
he's just
trying to
figure out
Linux.
Don't,
don't hold
it again.
Kill child
without killing
grandchild.
It's so
bad.
Can you
do that?
Well,
I don't
know.
I haven't
searched it,
but I
don't want
to have to
explain that
search if I
did.
Search it
in stealth.
That's what
incognito
most.
This is
totally benign,
but if
somebody sees
it out of
context,
maybe they
won't feel
that way
about it.
There's what
will get you
on the FBI
list and
then software
engineers.
There's like
Vendrygram of
that.
there's
probably a
small
intersection
there.
It's probably
pretty big
actually.
Yeah,
it's probably
pretty big.
Anyway,
well,
thanks everybody
for a fun
show again.
Yeah,
you bet.
Thanks,
Brian and
Daniel.
It's good
to have you
here.
Thanks.
Thanks for
coming.
Bye.