Python Bytes - #198 There's a beaver in your database and Anna-Lena drops by
Episode Date: September 11, 2020Topics covered in this episode: Easily create Python scripts using argparse DBeaver Database UI Tool Anna- pdp++ debugger Markdown toys Python Malware and obfuscation Anna- attrs package Extras Jok...e See the full show notes for this episode on the website at pythonbytes.fm/198
Transcript
Discussion (0)
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
This is episode 198, recorded August 31st, 2020.
I am Brian Ocken.
I'm Michael Kennedy.
And we're joined by a guest. We have Annalena Popkus.
Yes, that's very correct.
Wonderful. She's been on Michael's Talk Python podcast a couple times.
Absolutely.
Or at least once.
It depends how far out in the future.
I think in the future twice.
We've already recorded a couple shows together,
but we've got quite a buffer there,
so this one will be out before.
So one and two times, and welcome to this show.
Nice to see you.
Yeah, thanks for having me.
I'll kick it off with the first topic.
Give us something easy.
Don't make it hard, Brian.
Come on.
Yeah, actually, so I remember it's been a while since i shifted of thinking about python as a scripting language to as a full-blown language
to do like everything big applications and stuff of course i still do both i use it for a quick
scripting language but also uh more meaty things but back in the day when i was using bash if i
wanted to have a little uh script to do with arguments,
I'd have like an example bash file that I would just keep copying from.
And I was thinking about that because I would,
I would never remember how to do arguments and stuff and parameter passing
through into a little script.
And the same is true for Python with arg parse,
but we have Google now to find that information out.
But I was thinking about that
when I saw this comment on Twitter.
It's from Joshua Schreiber.
And he said,
every time I write a Python script,
I have to go back to an old script of mine
to remember how to set up argpars.
For some reason,
it just doesn't stick in my mind at all.
And then Ken Yones Clark,
and I think he's been on your show, hasn't he, Michael?
No, I don't think so.
Okay.
Probably should be, but hasn't.
He commented and he said,
I've got this little utility called the new.py.
So I went and checked it out and I'm pretty happy with it.
It's not something you can pip install
and we're going to link to it in the show notes.
It's just part of, he's got a repo for it, and I think he uses it in a book that he wrote.
But basically what it does is you run it and give it a file name,
and it gives you a little starter script with all argparse stuff with examples.
You've got an example positional argument, a string argument, integer argument,
file argument, and a Boolean flag, so you don't have to look that stuff up.
They're already there as dummy ones.
And then you can add to it and whatever, delete the stuff you don't want.
So if you've got this around, you can use it to spin up a new script really easily.
And he also just recently added test code for it.
So if you pass it a dash T, it'll generate a little stub test file.
So you can test your script with it too.
So anyway, if you're using Python for scripting, I think this is a good thing to look at.
I love that.
I have the same problem every time.
I always copy it from an old script every time.
I was thinking the same thing.
Like, what is one of the big difference between beginners and experts?
Experts have a whole bunch of these old things they can go and copy from.
Well, I often use, so I'm usually using Click or what's the other one that's...
Typer.
Typer's the business.
Yeah.
So I'm usually using those for larger applications, but there's a lot of times where you're passing,
you have a shared script that you don't really want to have install anything extra. So ArcParse is still something to use for
a lot of stuff. Yeah, very cool. Yeah, if you don't want arguments, sorry, dependencies, this
is a great example there. Because if your script could literally run without a pip install or
without a virtual environment, except for that, you know, I probably would just have a slightly
more cumbersome bit of code and have it easy, easy to run.
You know, I've been thinking about how I should really be building more CLI based applications.
And I have an insane number of these little, what I would really call scripts.
They're not applications.
They're like little tools that I just use to run all the stuff around my company. So for example,
one that I wrote last week was I had a company that did transcripts for the video courses,
and then they stopped doing that. That's fine. They moved on to doing other things,
but all of a sudden I had to figure out, well, how do I get transcripts again?
So I wrote a little script that would go find all of the videos in a course,
see if it was missing transcripts, go and use AWS Transcribe and just of the videos in a course, see if it was missing transcripts,
go and use AWS Transcribe
and just say the videos in AWS S3,
do this and then download it
and turn it into sentences and subtitles and video.
So there's like 50 of these.
And I'm at the point where I almost think
I might just make one command line option
to run every one of those scripts, right?
Like kind of like git with
sub commands like tp space transcripts tp space video and code right like i'm almost ready to
build this huge cli thing and i probably won't use arc parse though i'll probably use typer yeah
sounds like a good idea yeah exactly because i always forget i'm like did i write that what's
it called how do i run it again to track it down so this next one comes to us from a listener
exuma is the username i didn't get a first last name so thanks for sending that over and it's
called d beaver db ever something like that so it's for databases and has to do with beavers so db
ever database ui tool and something about working with beavers. So DBEVER, Database UI Tool. And something about working with databases
inspires people to use animal names or creature names.
So this is DBEVER.
And the one that I mentioned that started,
got Exuma saying, hey, this is cool,
but you should also check this other one out,
is I mentioned Beekeeper at beekeeper.io,
which is really, really cool.
So here's another
cool free open source database GUI tool. So if you got to work with databases, this looks like
a really nice one. Yeah, it looks pretty cool. Yeah. You know, it doesn't have the full on
marketing, beautiful page. Like if you go to beekeeper studio, sorry, beekeeper studio.io,
man, that thing looks like it could be a vc funded
startup like landing page right whereas the beaver is nice but it doesn't have it doesn't look like
ultra polish but it's based on eclipse and it supports 80 different database types so obviously
the popular ones like my sql postgres sql light microsoft sql server and so on but a whole bunch of other ones as well so yeah if you got to
work with databases and you want some kind of ui tool this looks like a pretty good option do you
have an idea why they called it beaver i have no idea why they called it beaver it's funny sometimes
since in machine learning they had a trend that they named the models like sesame street do you
say sesame street yeah yeah yeah yeah And they started calling them Bird.
Like Grover and Big Bird and all this kind of stuff.
Yeah, and someone started it
and then the others just continued naming the models like that.
It was a lot of fun.
Yeah, it's really fun.
Last episode, which isn't out yet,
so there's no way you would have heard this,
but we were talking about something on Debian.
It was going through the Python Docker script
and understanding what it means
to create a bare-bones Python system.
And Debian names their releases
after Toy Story characters.
I like that.
Yeah, that's nice.
And of course, you were doing all of your stuff with 100 days of code and harry potter right which is also pretty awesome but there's not
really releases for that is there no so let's see so a couple more things that are interesting about
d beaver is it got a nice gooey interface it has dark mode light mode and whatnot has support for
cloud data sources.
So if you're going to connect to, I'm presuming things like hosted databases like SQL, Azure
or something like that.
But it also has extensions that allow you to work like directly between databases and
Excel or databases and Git, which I think is pretty cool.
And it also will build UML entity diagrams like show me the relationships of this table,
you know, where the foreign keys go and all of the things like that visually, which pretty nice if you're just like
given a project, here's the database, right? Oh, what the heck did I just get? Right? You could
open it up in something like this. You know, PyCharm Pro has something along those lines as
well. But this is free and open source. So that's pretty cool. Yeah, I use the one for PyCharm Pro
for and the diagramming helps a lot
to be able to visualize what your data is doing.
Totally agree.
I use it all the time, yeah.
All right, well, that's it for DBeaver.
I think it's cool.
People can check it out,
compare it with Beekeeper Studio.
Great.
So I want to talk about PDB++.
So I was always using the IPython debugger
when debugging, but I recently switched from using IPython debugger when debugging,
but I recently switched from using IPDB to PDB++.
So PDB is the Python debugger,
like the normal one that's part of the standard library.
And PDB++ is an extension of that.
So it's fully compatible with PDB,
but it has some pretty nice features.
And I think they improved the debugging
experience quite a bit. It's very easy to install. So you just type pip install pdbpp,
since pdb++ is not a valid package name. And I have two favorites, like it has quite a few additional commands and features compared to PDB but it has
all the usual commands that are also part of IPDB so it's very easy to switch but there is the
sticky mode which I like a lot so the official description is that when you're in the sticky
mode every time you change the current position the screen is repainted and then the whole function is shown.
So when doing step-by-step debugging, it's very easy to follow the flow of execution.
And I constantly use that feature since I find it very annoying to always type L or double L to see the code.
And with a sticky mode, you can just always follow along with the code and the flow of
execution. I like that a lot. And then there is smart command parsing, which I also like.
So if you have, or if you're using PDB, it always tries to interpret the commands you enter as one
of the built-in commands, which can be quite inconvenient in some situations. For example, if you want to print the value of a local variable, and that one happens to have
the same name as one of the commands, for example, you can...
Oh, no.
Yeah, that could... And I had that quite a few times. So, for example, if you call something
P or C, and then you want to print the value of that variable, but it is interpreted as
the command continue, which is C is short for continue.
And I think PDB++ has quite a nice solution for that.
So when there is ambiguity, so if you have a variable with the same name in the current
scope, then that variable is preferred. And if you still want to
run the command, you can just prefix it with two exclamation marks. But if you don't have any
ambiguity, and you type C, then it will always be continue. And I find that very convenient.
Oh, yeah, that seems like a great little feature. And it just runs in the terminal, right? So you
can run it anywhere that you have SSH access to
or something to that effect.
Yeah, I think it's a very nice package.
Maybe this is a dense question,
but why use this over like an IDE?
Oh, I just always use Vim.
And that's why I got so used to using Vim
that I find it very convenient to use PDB or IPDB or now PDB++.
I guess I would have to start using an IDE properly to really be able to appreciate it.
But it's hard if you got so used to using your keyboard and you have your keyboard shortcuts.
And yeah, I don't think I can switch back to an IDE for a while.
Okay.
Yeah, it has some cool features as well down here.
One of the things is if there's an exception,
you can ask it for a post-mortem report
and it'll give you extra details in there.
You can also do stuff like break on set attribute.
So if some kind of attribute is set,
which is, I guess, a little bit like a conditional breakpoint
and say an IDE or whatever.
But yeah, it looks pretty cool.
I like the fact that it has syntax highlighting and color
and all that.
Yeah.
And autocomplete.
I know that it can be quite nice in an IDE too.
I think on the last TalkPython episode,
it was on the Python...
How was that episode called?
It was called
the Modern Python Developer's Toolkit
by Sebastian Witwoski.
And you talked about Visual Studio.
And yeah, I know that it has quite a few features as well.
But when you're used to something like IPDB, this is a very nice addition.
Yeah, yeah, absolutely.
And you can also, what's the double exclamation point thing?
So you mean what I just mentioned with the command?
Yeah, yeah, yeah.
When would I run that?
So if you have like a variable C and that has some value, so it's a local variable,
but you want to run continue in this case
then you would have two
exclamation marks and the C.
Yeah, so that's why it skips it. Okay, got it.
I understand now. Cool.
Alright, yeah, this, you know, I live
largely in the IDE world
but if I needed
to do some debugging outside of it, this is
a really nice option, I think.
Like maybe in a Docker container,
and I don't want to set up remote debugging
and all that kind of stuff.
If you want to run it, what's it doing?
Yeah, that's cool.
Nice.
Oh, yes.
Today's sponsor is us.
So thank you, us.
Thanks, us.
We'll probably have to edit that section.
Today's sponsor is both TalkPython Training and Test & Code podcast as well.
I wanted to highlight, I had some, I think last episode I mentioned that Adam Johnson,
which he hadn't actually been on our show yet,
but the last episode of Test & Code 128 I did have Adam Johnson on.
He is the maintainer of PyTest randomly. And so we talk about the importance
of randomizing your tests to make sure that you have order-dependent
order-independent tests. So that's a good episode.
But we talk about all sorts of stuff on Test and Code, including things like
tips for working from home. That was on episode 127. So check it out.
I think people are doing that more than they used to for some reason.
I'm not really sure why.
Working from home?
Yeah.
Yeah, definitely.
Yeah, no, that sounds great.
And talk Python training.
Yeah, we just released a brand new course,
Move from Excel to Python and Pandas.
So if you have been trying to overdo all those stuff that you do
around data with Excel or people you work with are,
we created a course written by Chris Moffitt from Practical Business Python do all those stuff that you do with around data with Excel or people you work with are.
We created a course written by Chris Moffitt from Practical Business Python to basically go through all the main use cases of Excel and show how much easier it is to do that
in Jupyter and Pandas.
And I think it'll help a lot of people get their foot in the door in the Python world.
I think that's really cool.
I always wanted to learn Excel, but it's so much nicer with Python
that I never got around to doing it.
Yeah, that's perfect.
That's the good side to be on, not the other side.
Yes.
Awesome.
So Brian, tell us about Markdown.
I really like Markdown.
I use it for a whole bunch of stuff.
And when I, I mean, so much so
that I just kind of assume everybody's using Markdown now, but sometimes people have trouble getting up to speed or you want to share something.
Anyway, I came across, I was actually having a Twitter discussion with somebody and they brought up this hackmd.io tool and hackmd.
I've never heard of that.
So I went to check it out and i'm pretty impressed with it
it's pretty cool it is a paid service but there's a free option too so of course i'm on the free
option but the idea is just sort of i've got the similar there's a lot of tools that do this you've
got a two panel system where you on the left you your markdown and on the right it shows up
then you can hide one or the other but the what I really like is some of the stuff that I always forget,
like how to insert a picture or do a table of contents
or put reference links in or footnotes.
Those things are just sort of in there with menu items,
so I don't have to remember what all those Markdown codes are.
They just added, apparently you can collaborate
and have multiple people editing a document with this. So that's pretty cool. There's some fancy extra things like
UML diagrams that you can add in. And I'm not sure if you're exporting it, you'll have to try to
figure out what sort of extra tools you need to actually generate those. But it's pretty fun.
The thing that I like that they just added recently, apparently is you can sync with GitHub.
So you can keep all your Markdown documents in GitHub and edit them with,
with HackMD.
And that's pretty,
pretty fun.
That's awesome.
The other thing I found was this thing called Markdown guide,
and it is just a,
just a really good clean reference for Markdown.
So I'm going to,
there's,
I had,
you know, a handful of different references that I was using,
but I think I'm going to switch to this one
because there's tabs that have like a getting started page
that I can send people to and a couple of cheat sheets.
One of them is the most common things,
and I think it's pretty indicative of common things you'll use.
And then an extended syntax page with,
and then a bunch of tools you
can use so a couple markdown references for people have you ever used pandoc oh yeah i love
pandoc yes since i recently started using it and i'm preparing my presentations now
with pandoc every time and i love it it's just great great tool i love about Pandoc is it's not just from Markdown to HTML, but you can convert to MediaWiki or lots of, or I use it a lot of times to format my emails correctly in the Microsoft Office.
I will write them in Markdown and then use Pandoc to generate the Word doc version and then copy and paste into an email.
I know it's backwards,
lots of steps, but it works for me.
You know, it'd be nice to have just an
email editor that just takes
straight Markdown. Wouldn't that be cool?
Yeah, that would be cool.
I'd really like an extension to Microsoft
Outlook that had
them key bindings.
That would be awesome. the programmers are invading
outlook uh yeah some other cool stuff about markdown or hack markdown hacked md is it has
a vs code extension and like you said the github integration is cool it has a browser extension
you could turn your notes into a slide deck you can turn it into like a research project into like
what they call book mode yeah it looks pretty interesting and the collaboration is definitely needed around markdown
these days like there's not really a great collaborative place that i know of although
i'm sure listeners are going to send us five examples which is awesome because they always
they always do but for example like we can do slides with this yes you you can export paper from dropbox paper
paper.dropbox.com as markdown but it's not full fidelity it's like 85 percent that you can edit
what you get but it's still it's better than nothing but yeah this looks cool nice you know
what's not cool python malware that's not a thing is it uh apparently it is now a thing so connor fester first year sorry
i sent in this interesting article which was done was this done by it was one second
cyborg security so these guys wrote a pretty cool article about how python malware is starting to
show up now you may have heard articles or mentions
of certain package management stores
getting infected with malware.
Like we talked about some researchers
putting some kind of malware onto PyPI.
JavaScript had this at NPM.
Ruby had this with their gem store.
So that's not what I'm talking about here.
That's an issue, but that is not this.
This is about what are people doing to create the runtime environment, just the viruses basically with
Python. So traditionally, this has been like a C, C++ type of thing. But there's some interesting
parallels just as you go through here. I don't want to encourage anyone to do this, but I want
to put it on people's radar to be aware that it could be being done, you know?
So, for example, one of the challenges of you build a C++ app, you can just send a binary around and run it.
Not so easy with Python.
The standard library has to be there or CPython has to be there.
But they talk about, well, people are using Py2exe and Py2app to package up their python viruses and send them around isn't that weird
i mean i guess people will do weird things yeah so there's an example of python malware
called cduke that was used against the democratic national committee back in 2015 and 16 there's
other tools that might be just generally useful to people regardless of whether it's in this context
or not like uncompile six this is the successor to decompile uncompile in uncompile two i don't
know where three four five and went but on the pile six is a native python cross version a python
version i guess decompiler and fragment decompiler so what it'll let you do
is it'll take python bytecode and turn it back into source code so instead of taking a python
file and turn it to pyc take a pyc and turn it into a python file interesting yeah some people
have been shipping pyc files alone right and just knowing that those can literally be turned back
into source code and like one line of commands should be something on your radar, right? Because it looks safe, but it's not that safe. There's also a high installer
extractor. So if you were to ship a library or application as a PI installer thing, you can turn
it back into a bunch of source files, you can open up and stuff. And then they also talk about if you're given an executable,
how to understand whether or not it was built with PyInstaller
or if it was built to Py2XE or any of those tools.
Like given an arbitrary executable,
is this a Python packaged up thing, yes or no?
That's cool.
These are great tools.
The article looks really interesting.
I never thought about malware and Python before. Yeah, there's a lot of interesting details and concrete examples of
here's how they did this with this one thing or that. And I think it's an interesting read. Again,
not trying to encourage people to do these things, but just raise awareness, like what the role of
Python is in this, you know, less popularized space, right? People always want to hide what
they're doing in this world.
There's another application for some of these.
Sometimes businesses have, they'll be afraid
or not want to pass around Python files
because of the problems with knowing
what the interpreter is or something.
So they'll use PyDexe or something
to make an executable for a tool for the company.
And then that gets passed around and somebody loses the source or you don't know who has it or something.
So using some of these reverse engineering techniques to get some source back, that'd be kind of cool to use for that purpose as well.
I have an example of that.
So one time there was
this program we built and this was early in my career i must have been like not so good about
checking in stuff and somehow the thing that i was working on had a file that somehow didn't get
added to to uh it was svn at the time so i had pushed all the changes, but I forgot to add this one file.
And then my computer died.
And the problem was, it was like my hard drive died.
And so like there was some part of the application
that in the middle of the app used this library.
And then there was the rest of the app
that was kind of below that.
And so it was really hard to figure out
how to rewrite just that middle piece
because it was like a weird jigsaw puzzle that had to fit together. So I just went and disassembled the application,
found the few files I needed. They were named weirdly, but I just renamed them in a way that
worked. And then off it was, I checked it into Git and we were good to go, or into SPN and we
were good to go. And you probably never forgot to check in your files again.
No, I'm very obsessive about it now. That's right.
Yeah, absolutely.
Anyway, that's all I got for this one.
It's an interesting article, though.
It's well done with some nice examples.
Yeah, so I'm going to go on with, do you call it etters?
I call it adders.
Brian, what do you call it?
Adders.
Adders.
That's really like American English.
I would probably say etters, like often and not often.
Okay, anyway, so what is Etters?
It's so I only, I think I saw it a few times before,
but I never actually looked into the package.
But now a few weeks back, I've started using it for the first time.
So what is Etters?
It's a Python package that simplifies writing classes.
So it creates a
lot of the dunder methods automatically. Yeah, that's cool.
Yeah. And when I first saw it, I thought, we have data classes. So why do we need Etters?
And only then I realized that Etters is much older than data classes. So PEP 557, Edit Data Classes to Python 3.7.
And they do resemble Etters in many ways.
So when I started reading a bit on the documentation page of Etters,
I found out that the PEP was actually inspired by Etters.
And it was the result of the wish of the community to have a simplified way
to write classes without having to deal with
the problems that name tuples have and the i think the main difference between
etchers and data classes is that data classes are strictly less powerful and that certain features
were sacrificed for the sake of simplicity so it's very easy to use data classes. They are part of, I think, 3.7.
With 3.7, they come automatically.
But if you have 3.6, you have to pip install them,
but you don't have to get a new package for them.
And it's very easy to use them,
especially if you have classes with many attributes.
But with Etters, you have quite a few additional features.
For example, you have validators
that you can use when you have your initializer in the class
and you want to perform some kind of validation of the input arguments
like checking that they are an integer
or some other type or more fancy stuff
then you can do that very easily with Etters
and it's a very powerful library so
i think i need a lot more weeks to really get into the details and all its possibilities yeah
this is a good one there's a lot of subtleties around creating classes that you're that can be
a little bit annoying like wouldn't it be great if you could have it print out something other
than just the name of the class at some memory address automatically, that would be nice. If you create a dunder equal
dunder EQ method, well, you got to remember to create the not equals. That is the opposite of
that. And oh, if you create equals, maybe you also have to implement hash as well. Because
all of a sudden, if two things are equal you put them in
the dictionary but then they're not the same thing that's going to be all sorts of crazy
it just starts to cascade you're like wait a minute doing this right it's not so easy and so
i think that's the kind of the zen of the adders yeah i found it a bit confusing in the beginning
with the syntax how it looks like if you declare an attribute like it's a decorator atters but then for the attributes of
the class you have this is it atters dot s or something and i found that a bit confusing in
the beginning since data classes are i think more beautiful when you write them and you don't need
this extra bit but once you get used to the syntax,
it's very nice and easy to use.
I have to agree.
I like the data class syntax better.
The dotness of the address syntax is cute,
but bugs me a little bit.
Like attrib, the attributes are attr.ib
and it's not something I really enjoy, but it's not difficult either. The main switch
for me, I think is now, now that data classes are here, I use data classes all the time,
but when I need a validator, the validation mechanism in adders is, is pretty darn cool.
So if you want data validation, adders is still a great thing to pull up. I agree.
I really wish that validators were in
or at least maybe we could
have an extra package that
we could pip install or something
that would make data classes
have validators, hopefully.
I know there's other things that you can do
to validate schemas and stuff
like that. Yeah, I feel like there's a little bit of a paradox
of choice.
You look at all these things
and you want all of the features
like kind of in this impossible combined way.
So adders is cool.
They've got things like,
you can say that these attributes
can only be set as keyword arguments
in the initializer
and not as positional arguments
and just KW only equals true,
stuff like that, which is pretty cool.
And then you've got the Pydandic models,
which have like built-in validation
for all sorts of types, which is cool.
You've got data classes.
Those can be frozen, which is kind of nice.
There's a lot of stuff going around here
and I feel like I'm under utilizing all of it.
Well, grab what you need.
It's good.
Throw some tests around it and switch later.
For me, it's sometimes just easy to forget what's out there
since there are so many nice packages.
And I sometimes hear, like I listen to a podcast
and then I think, oh, that package sounds cool,
but I don't have an application for it right away.
So I forget about it again.
And then in some context, I hear about it again.
And I think, oh yes, you always wanted to try that. But I think at least with etters now like i will use it again quite a few
times yeah i have that same problem i get excited about all these things but i don't have a chance
to use them and then i i forget then i'll rediscover like oh yes that's why i thought it
was cool in the first you could you should create a harry potter style project yourself
for trying out all these things that's right like awesome harry python harry potter style project yourself for trying out all these things that's right like
awesome harry python harry potter python i'm gonna work on the naming i like harry python
yeah well it might it might invoke images that are not exactly the same what you're thinking
oh yeah okay never mind yeah all right well you guys got anything extra i don't brian no extras no no
i'm not you and elena maybe take a moment just tell folks like what you're up to we didn't give
you a really introduction on the kind of work and stuff you're doing yes so i think the first time
michael and i talked on talk python to me i was still an ai resident at microsoft research in
cambridge so i was doing a lot of machine learning research.
So working in the middle between a full researcher
and a full software engineer.
And now I'm a machine learning engineer here in Germany
in a company called InnoVex,
where I do like I apply machine learning
to projects, proper real world problems,
which is also very interesting.
And I do all kinds of stuff
now, data engineering. So yeah, I'm always learning new things every day, which is really nice.
Yeah, that's very cool. All right. So I've got a couple of things really quick to share. I was on
a cool podcast, TV like show called TechNado, which was a cool experience. It's a little bit
like Python Bytes, but for the IT space.
So that was a lot of fun to be on there.
And on YouTube, you can check it out.
And we played the game Python, Python, Python, where we would get partial words out of a headline.
And we'd have to decide,
is it Python the snake, Monty Python,
or Python the programming language
that the article's about?
And that was pretty fun.
So you could check that out over there
if you're interested.
Sorry.
So did you win?
I completely got crushed.
I think I got last because I wanted everything to be about Monty Python.
And they're like, no, that's about a snake.
I'm like, oh, come on.
That would have been so funny if that was about Monty Python.
But no.
Yeah.
I let my hopes and dreams get ahead of me.
Maybe next time.
Exactly.
I'll come back for the championship later.
All right, Brian, what do you think about this joke?
I haven't looked at it.
Oh, perfect.
Then you got to open it up.
And Elena as well.
This one is, as per usual for us, a visual joke in an audio format,
but I think it's going to work great.
So this one is called the only valid measurement of code quality.
And I know, Brian, you're very passionate about high quality code and testing and stuff like that.
Have you seen this metric built into any of the software you use?
Well, you can't.
Maybe with some voice recognition and some AI and Elena could put something together for us like starting the code review now.
It looks so funny. I love that.
Yeah. So this is the only valid measurement of code quality is WTFs per minute. I'll try to
keep this without the explicit tag, but WTF. So there's a comparison here. On one hand,
we've got the good code review, which is still like, it's like a door that's closed. You can
just see like statements
of what people's going on
it's going on the side
you hear this
WTF
WTF
what is this
that's the good code
the bad code
is just full of them
it's like WTF
what the
WTF is this
a dude
WTF
WTF
I think this really
captures code review
pretty well
it does
anyway
the only valid of measurement of code quality,
WTFs per minute.
Definitely.
All right.
Well, that wraps it up for this week.
All right.
Thanks, Brian.
Thanks, Elena, for being here.
Thanks.
It was a lot of fun.
Yeah, you bet.
Bye-bye.
Bye.
Thank you for listening to Python Bytes.
Follow the show on Twitter at Python Bytes.
That's Python Bytes, as in B-Y-T-E-S. And get the full show notes at Python Bytes. That's Python Bytes as in B-Y-T-E-S.
And get the full show notes at PythonBytes.fm.
If you have a news item you want featured, just visit PythonBytes.fm and send it our way.
We're always on the lookout for sharing something cool.
This is Brian Ocken, and on behalf of myself and Michael Kennedy,
thank you for listening and sharing this podcast with your friends and colleagues.