Python Bytes - #198 There's a beaver in your database and Anna-Lena drops by

Episode Date: September 11, 2020

Topics 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)
Starting point is 00:00:00 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.
Starting point is 00:00:22 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.
Starting point is 00:00:37 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
Starting point is 00:01:04 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
Starting point is 00:01:27 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.
Starting point is 00:01:42 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.
Starting point is 00:01:59 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.
Starting point is 00:02:28 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.
Starting point is 00:02:57 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.
Starting point is 00:03:17 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.
Starting point is 00:03:58 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
Starting point is 00:04:27 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
Starting point is 00:04:45 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.
Starting point is 00:05:31 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
Starting point is 00:05:52 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
Starting point is 00:06:37 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,
Starting point is 00:07:02 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.
Starting point is 00:07:23 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
Starting point is 00:07:55 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.
Starting point is 00:08:29 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++.
Starting point is 00:08:40 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.
Starting point is 00:09:04 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.
Starting point is 00:10:00 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
Starting point is 00:10:47 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
Starting point is 00:11:26 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.
Starting point is 00:11:57 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.
Starting point is 00:12:28 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.
Starting point is 00:12:41 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.
Starting point is 00:12:59 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,
Starting point is 00:13:23 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
Starting point is 00:13:39 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.
Starting point is 00:13:52 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,
Starting point is 00:14:19 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.
Starting point is 00:14:47 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
Starting point is 00:15:01 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.
Starting point is 00:15:27 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
Starting point is 00:15:42 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,
Starting point is 00:16:28 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.
Starting point is 00:17:01 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,
Starting point is 00:17:20 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.
Starting point is 00:17:35 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.
Starting point is 00:18:26 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
Starting point is 00:18:42 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
Starting point is 00:19:17 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
Starting point is 00:20:08 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
Starting point is 00:20:32 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
Starting point is 00:21:13 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
Starting point is 00:22:00 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.
Starting point is 00:22:40 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.
Starting point is 00:23:07 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.
Starting point is 00:23:42 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
Starting point is 00:24:12 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
Starting point is 00:24:39 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.
Starting point is 00:24:55 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.
Starting point is 00:25:14 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.
Starting point is 00:25:49 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.
Starting point is 00:26:30 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
Starting point is 00:26:55 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
Starting point is 00:27:31 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
Starting point is 00:28:14 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
Starting point is 00:28:42 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
Starting point is 00:29:14 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
Starting point is 00:29:28 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,
Starting point is 00:29:42 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.
Starting point is 00:30:00 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.
Starting point is 00:30:18 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
Starting point is 00:30:53 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.
Starting point is 00:31:30 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
Starting point is 00:31:55 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
Starting point is 00:32:21 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.
Starting point is 00:32:32 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.
Starting point is 00:32:45 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.
Starting point is 00:32:59 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,
Starting point is 00:33:38 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
Starting point is 00:33:50 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
Starting point is 00:33:58 WTF I think this really captures code review pretty well it does anyway the only valid of measurement of code quality, WTFs per minute.
Starting point is 00:34:09 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.
Starting point is 00:34:16 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.
Starting point is 00:34:33 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.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.