Python Bytes - #188 Will there be a "switch" in Python the language?

Episode Date: July 3, 2020

Topics covered in this episode: Making a trading bot asynchronous using Python’s “unsync” library Fruit salad scrum estimation scale Math to Code PEP 622 -- Structural Pattern Matching CodeAr...tifact from AWS invoke Extras Joke See the full show notes for this episode on the website at pythonbytes.fm/188

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 188, recorded June 24th, 2020. I'm Brian Ocken. And I'm Michael Kennedy. And this episode is brought to you by us, TalkPythonTraining and Brian's fabulous PyTest book. Brian, can you believe 188 contiguous episodes? I cannot. The number keeps going up. I guess that's what numbers do, but I guess so. It's awesome. I'm glad we're still doing it.
Starting point is 00:00:31 It's fun. What you got for us to start with? Well, you may have heard me talk about async and actually I didn't cover it on purpose. There's sort of a controversial async article going around. Don't really want to talk about it at the moment unless i have to but i do want to talk about my favorite async thing which is unsync u-n-s-y-n-c unsync okay i feel like the python core developers should look at this and say you know what we massively over complicated all the asynchronous parallel capabilities of python, let's create a unifying API that like is the one simple way that you can do things. And if you need to dig into the details of the other ones,
Starting point is 00:01:12 that would be great. They haven't done that yet. I mean, async and await, the keywords are great, but if you want to say work with like a thread and some async IO thing, the way you do it is like totally disjoint and unrelated. So this unsync library is like a unification library on top of threading, multiprocessing,
Starting point is 00:01:32 and async and await. So I've talked about that a bunch of times and it's sweet. I'd love to see Python just adopt something very similar to that API internally. Anyway, there's a cool article called Making a Trading bot asynchronous using python's unsync library by matt matt gosden oh nice yeah it's cool it just walks you through
Starting point is 00:01:51 a somewhat realistic example of creating something that does freighting and in order to do it has to go and you know it talks to a different web services and some databases and whatnot now all these are simulated with a function call to a time.sleep call right one of the things you'll see a lot of people when they do like these performance analyses and stuff is they'll have some async code and it's hitting up against some other thing and that other thing has a performance limit that is like near near what it can handle anyway. And so you can't get a big boost out of it. So this kind of like puts that to the side.
Starting point is 00:02:30 So it's like, we're not going to actually talk to another thing because maybe that thing is slower than we can handle or who knows. We're just going to go and simulate slowness by sleeping, right? So it actually walks you through some different ways of doing things. It has a synchronous version and the async and await version using unsync. I don't know if there's intermediate. I can't remember if there's intermediate versions in this tutorial about having just a pure threaded version, right? But it's mostly about taking the synchronous version and making it unsync. So it's nice because it's a somewhat realistic example. It's not as much of a realistic
Starting point is 00:03:07 example as some of the scenarios. It's not as ideal of an example as some of the other scenarios. Like, for example, if I need to web scrape 100 different websites, right, you can do that 100 times faster by just like kicking them all off and getting it back and not really waiting because all the work is happening distributed elsewhere. but it's still a pretty realistic example doing some different things it would be fun to hear it talk about scalability more like how much it's like we've got a couple i think it's doing three things it's like look we could do these three things quicker but you know like what is the limit like how far can you push it because i think you could push it quite far actually with what they're doing it's just hard to to know if sleeps are representative as well.
Starting point is 00:03:47 Yeah, it is hard to know if a sleep is representative. Basically, if it's a truly external system that has infinite scale, some cloud service, then a sleep is probably pretty representative. Whatever you're doing is not going to affect it. But if it's, say, a database, if I'm doing 10 requests against the database, versus one, and maybe the database can't handle it, and it slows down to what like two or three queries at a time would be like, there's things like that, right, where it hits a limit. But if the thing you're talking to totally scales, and sometimes it does, sometimes doesn't. One thing that I think is missing from this is it doesn't actually use async methods it just has regular methods so this is
Starting point is 00:04:27 really an interesting thing right so it's like okay we're going to put unsync on it there's a regular function that we put that unsync decorator which turns them into these things that are awaitable and parallel and so on and what you really probably want to do is actually leverage async and await create you know def async methods, you know, await async IO sleep and all that kind of stuff. So it didn't actually fully transition them to leveraging async IO. But what I think is interesting about that is it still got much better with unsync. And what's cool is like it said, okay, well, these are not async methods. So we're going to have to use threads, but let's just fire them off with threads anyway. And because the time.sleep releases the gill just like a network call would it still kind of works
Starting point is 00:05:09 so it's kind of neat that like it wasn't fully converted over but unsync still made it better in the same way that you would expect interesting yeah yeah yeah so anyway a cool example of someone talking about unsync was not me except for right now reviewing it there's a lot of cool stuff in there kind of like a like a fruit salad would you say just a lot of stuff to take and it's it's sweet and people generally enjoy it oh man i shouldn't have picked this story right before lunch also because i'm kind of hungry i know i know it's good so tell us about this i was going to put this as an extra thing but i put it as one of my topics because it's actually pretty darn cool. So this on Twitter, Lacey Henschel just asked the question of like there was this scrum estimation tool with fruit.
Starting point is 00:05:54 Does anybody remember it? And Kathleen Jones replied and said, is this it? Essentially. And it was. And so we're linking to this article. It's called the Fruit Salad Scrum Estimation Scale. And, you know, task planning and scrum estimation is, you know, it's a kind of an art form and a science together. It takes a while to get things right.
Starting point is 00:06:18 So maybe just really, really super quickly tell people, what is this scrum estimation about? Oh, okay. Maybe scientists and they're like we don't do that in our biology lab oh that's true lots of teams have picked up scrum or sort of a variant of scrum which is a way to plan what tasks what things that people are going to work on and the things that people work on we kind of want want to, you know, have a, like a size for them. And instead of doing like, oh, it's a one day task or a two day task or a five day task, or some people just use small, medium, large t-shirt sizes are popular. And then also for some reason, just
Starting point is 00:06:56 points are very popular. And the point system is often the Fibonacci sequence, which, but it's not really, it's just kind of Fibonacci. So I can't remember the numbers right off the top of my head. I think they're like 1, 2, 3. We usually skip 3, so 1, 2, either 4 or 5, and like 8 sometimes, and then like 13 and 40. So it isn't really quite fit normal Fibonacci, but I think that's where people took it from.
Starting point is 00:07:24 So we've been using them at work as well lately, but the numbers, it's kind of like t-shirt sizes, but I don't know, none of these things really fit. But the fruit salad estimation scale actually kind of fits. So they've mapped one, two, three, five, and eight to grape apple cherry pineapple and watermelon and i like these ideas because they're kind of like how easy they are to cut up something and how easy they are to eat them so like a grape is trivial you know you just pop it in your mouth it's no big deal you don't even have to cut it up for a fruit salad although i usually do an apple everybody knows how to cut up an apple but it's a little more food, so it takes a little bit more, and it might take some more time. A cherry. It's also easy, but there's some unknowns in it because of the pit. And a pineapple. Yeah,
Starting point is 00:08:18 you can't just eat that. You've got to actually put some work into it. Some people don't know how to cut it up, and it's a little messy. You're going to have to get your hands dirty for that one. And a watermelon, all bets are off. Nobody knows. You don't know what you're getting into until you cut open the watermelon. So I like that as the large size. There's more description on this article. And then they throw in some nice ones. Tomato and avocado avocado tomato and avocado do not map to points but tomato is unknown i mean are you a fruit or are you not and you need more information before you can estimate it and it really doesn't belong in the fruit salad until you change it into
Starting point is 00:08:58 something else and then one of my favorites is avocado that's something that you just get you can't really scope it very well. And it's probably urgent because it'll go bad quickly. These are great. I like this concept of thinking about them here. Yeah. So I think that somebody needs to put these fruits in an official product. That would be cool.
Starting point is 00:09:18 That would be cool. You know, another one that comes to mind here is a mango. Oh, yeah. You know, those are tricky because I like to cut them like in the orientation of the husk or whatever the thing in the middle is the giant seed but you got to hack into it a little bit before you can even figure out what that is so you kind of start out unknown and it's slippery you may hurt yourself on it but it's it's really i don't know it's a high value once you get it out of there i don't know mango and sometimes you can't tell until you get into the mango if it's even good or not.
Starting point is 00:09:46 Exactly. Yeah. I think mango is in this category somewhere. But this is a really cool idea. I was thinking about it because it's super hard to be very accurate when you're estimating stuff. And what I like about this is it just brings that together in a pretty clear way, right? They're not like, well, how many hours is it going to take? It's going to take three or four hours.
Starting point is 00:10:04 Like, no, no, no. We're we're not talking like i can't possibly give you that answer it's like all right fine it's four hours plus or minus 16 hours yeah and then that kind of stuff if you do points people always have like some conversion to hours anyway and it's annoying i think it'd be cool to if somebody said said, you know, I got a manager or somebody saying, hey, how much time we have left? I'd be like, well, we have three grapes and a cherry left to do. Yeah, just don't talk about it by lunchtime. Anyway, I am hungry now. So instead of doing another topic, we should just talk about how awesome we are,
Starting point is 00:10:42 how awesome your training courses are. Oh, thanks. Well, so this episode is brought to you by us and we both are doing stuff we would love for you to check out. So over at Talk By The On Training, we have a bunch of courses. I think we're up probably by the time that this goes out, we're up to almost 200 hours of courses and a couple hundred hours of exercises. So lots of stuff to be learned over there.
Starting point is 00:11:01 But I want to call out if you have a company and your company has a training budget or a training plan you know reach out to us we have special deals and offers and pilot programs to help get our courses started at your company so shoot me a message over the michael at talk python.fm or just check us out over there and uh if the writing code they should test it right definitely should test it, right? Definitely should test it. And tell everybody the Python testing with PyTest is the best way to get started with testing with Python. And even though it's like 180 pages,
Starting point is 00:11:35 the first two or three chapters will get you up and running like in a day, less than a day. So you can get started right away and then you just get faster and more awesome as you go along. Indeed. I take advantage of all those features in PyTest that people might not know about. So, you know, one thing I think people come into programming often feel like if they're going to be programmers, they have to be good at math. Like, oh, I was really good at calculus, so I'd be a good programmer.
Starting point is 00:11:58 Or I never actually got algebra very well, so I'd probably be a bad programmer. And I think that connection is often very much not true like i don't do math other than like basic arithmetic in my programming these days but some people do right some people come as engineers or they come as scientists and they actually do math frequently and they want to do it with python so vernon ther theramit thomaret sorry sent over this cool project called math to code have you seen this yeah i was checking this out the other day it's pretty fun yeah so imagine you wanted to learn something by doing uh flash cards right i'm going to show myself i'm going to flip through them and like see like a simple thing and then
Starting point is 00:12:44 what the answer to that is and this is kind of like that, like it starts out says, what I want you to do is take the square root of something using NumPy. And it's all based on NumPy, or just pure Python, like, raise something to the power is just x star star y, for example. But it just really quickly and simply takes you through that. So you type out the answer, hit enter, it's all hotkey driven, which is great for a web app. And it just kind of and simply takes you through that so you type out the answer hit enter it's all hotkey driven which is great for a web app and it just kind of guides you through like practice experience of here's a math problem solve it numpy yeah and it's so beautiful it is pretty right yeah cool yeah i honestly haven't made it to the end so i don't know how many answers or questions or whatever there are or flash cards as i'm calling them but it is open source on github which is pretty cool so you can go in there and you know check out the source code and play with it and yeah it looks like you know 13 questions but it's on github and the questions are just marked down so you could go add as many as you would like actually that's pretty cool yeah but what also is interesting just at a more higher meta level
Starting point is 00:13:49 is maybe you don't care about finding you know the square root of something in python is the building blocks so if you look at how this thing is built and like i said open source on github you can check it out it's built running python on the client side what really yeah so it's built using sculpt which is a javascript implementation of python and then it has sculpt numpy for the subset of numpy running on a client side that it wants you to experiment with right like numpy dot square root for example or mp dot square root it has ktex for rendering latex on the browser side it has next js for front end tailwind css which my friend mark just told me about which is a really interesting alternative way to like css front end frameworks like bootstrap
Starting point is 00:14:39 but different remark from markdown on the client side gray matter all sorts of stuff so there a lot of cool building blocks here, regardless of whether or not you're actually into the questions. Yeah, this is awesome. That might be more interesting, actually, than the thing, right? Because I honestly don't care about learning the math features generally. It's nice, but it's just not something I do. Yeah, but this sort of model of like have a, I mean, if you look at it, I don't know if you already said this, but if you look at it, you've got like the, some explanation and a question on the left, a place to type in and submit your answer on the right. And then there's even a place where you can like set up a hint and, and show, show the answer or hint or somebody. And having all this just, it's, it looks very nice.
Starting point is 00:15:23 And having like, this is an as an example for somebody else. I could totally see like a teacher running with this to help their students learn really pretty much anything. Yeah, it doesn't have to be exactly Python, as long as you can verify it with Python. Yeah, cool. Yeah. Tell us about the PEP. There's always a PEP to be discussed. I've learned about a couple of new PEPs in the 3.9 timeframe.
Starting point is 00:15:43 Right. So this is the 3.10 timeframe. So everybody should be using 3.8 now, and you should be testing 3.9, especially if you have a package that people depend on, so that when 3.9 is then official, it'll all work. But people are already working on 310 of course and one of the peps for 310 is pep 622 and it's not official yet it's in draft status but there's some cool people working on it including guido and i think it's super cool did you have you taken a look at this i have taken a look at it it starts out to me feeling like a switch statement. Yeah.
Starting point is 00:16:26 There's a lot more going on here. It's called structural pattern matching. And right off the bat, they note that there have been previous peps before that have tried to put switch case statements in Python. And they've been rejected. I don't know why they were rejected. It's kind of something I didn't pay attention to. But this, yes, instead of a switch case, it's a match case statement and a multiple statements. But the neat thing is there's all these different. So when we think of like a switch case statement in like from C, it matches by equality or value.
Starting point is 00:17:00 You switch on some variable name or some expression. And if the answer matches one of the case statements, then you run that part of the code. So that would be in the PEP 622 world, that sort of a use model would be like the literal pattern or the constant value pattern, basically with equality and stuff. But it does more than that. You've got name patterns so that if you just have a whatever, if these will always, if nothing else succeeds prior to it, you can just have a variable name pattern is only available in that it isn't assigned otherwise if that didn't get hit. So that's kind of some useful, neat things. Constant pattern is kind of the same, but then it gets interesting. So I think it'd be worth it just for that, but
Starting point is 00:17:57 you've got sequence patterns where you can do, it works like unpacking assignment stuff. You've got mapping patterns that are like similar to sequences, but for like dictionaries and class patterns where it can, you can have a, like a custom class or a class that it might be. And you have a match object. It's similar to an equality, but you could have, it could be different than equality. And then you can combine them with os, so you can match cases if
Starting point is 00:18:28 multiple things are true, like a Boolean expression in there. I don't think it's a full Boolean expression, but at least ors work. Or pipes. Guards, so you can say if this pattern matches, and then have an extra if expression so you can clarify it even more. And then even sub-patterns, and then have an extra if expression so you can clarify it even more. And then even sub patterns. And at that point, I kind of got lost. So just there's a lot here. I don't think it's going to clutter Python up. Actually, I've seen some examples of how this would dramatically simplify some Python. Yeah, it's interesting. What's surprising to me is
Starting point is 00:19:01 how many types of things it's trying to do at once right like it's not just like oh let's have a switch statement with like a slight variation like it's there's a ton of stuff going on including things like if you switch on an enumeration you can just say dot attribute and it'll try to like pull that attribute out of that type and check it and yeah it's it's pretty interesting one thing that's missing here that i would love to see is range matching right so i could say it's in the range of zero to ten match this case if it's a range of 11 to 100 do this other thing actually so i have my package the switch link package which adds switch to python and it has those types of things uh so
Starting point is 00:19:45 i actually sent that over to one of the people working on this pep and said hey this is really cool you know check out some of the ideas from this one like especially the the range matching and see if it makes sense here because it's so common that you you would want to say like this range is this case that range is that case and so on and we even talked about a package a while ago i can't remember exactly what it was called which is unfortunate we've covered too many things but it was basically you could give a like a number or a value and then this range and you could ask is this thing in that range in some real simple way so it'd be cool if like that was all combined you might be able to do with the if if guard though. So you could say like,
Starting point is 00:20:25 you know, match X, if X is within, you know, in this range. Yep. Yep. It's true. Yeah. We'll see. I mean, at that point, like if you're writing a lot of complicated if statements, you might as well just write if statements. Yeah. Yeah. Although, I mean, it's just always, I don't like it when I see like these, the if else ladders. So I think that this is more than, I mean, it's just always, I don't like it when I see the if-else ladders. So I think that this is more than, of course, more than just replacing the if-else ladders.
Starting point is 00:20:52 It's also doing things like unpacking and other sorts of cool stuff. But you're right, there's a lot going on here. There is, there is. But it's cool to see innovation around this. I do feel like that thing, that general idea is missing from Python. I know people say, you could just use a dictionary or stuff, but there's like a lot of cases
Starting point is 00:21:11 where if else is buggy, hard to maintain, or like these other cases are very, you know, verbose and so on. Anyway, I'm happy to see this, I think, depending on how it comes out. It's very complicated, but the idea is good. So one thing that we've talked about a lot brian is how do you host your own private pi pi right pip install a thing but i
Starting point is 00:21:32 want to be able to pip install and version like say you work at a large company you probably have libraries packages that you've shared across projects how do you like have the pip style package management but for you well we've got a custom PyPI in our network. That's right. And that's fine. That's fine. The more global you are, the harder it is to maybe do that well without people getting a hold of it. Obviously, you want to protect that code because that's internal private code, but at the same time, you want to share and version it.
Starting point is 00:22:01 So there's all sorts of options that you can set up and take care of that. But there's this new thing which Tormod McLeod has set over our way called Code Artifact from AWS. Neat. Yeah. So the idea is it is a general purpose, basically package management system for a variety of things. So right now it works with Java with Maven and
Starting point is 00:22:27 Gradle. For JavaScript, it has NPM and Yarn. And for Python, it has pip and twine. And basically, you can just set it up in AWS and tell it to go. And they'll take care of all the storage and the security and all that kind of stuff. And then you can just pip install all the things. And it also is backed by the real PyPI or the real NPM. And you can whitelist stuff. You say, okay, if somebody pip installs requests, just get the real request and stay in sync with that, but let them have it. But if they pip install the misspelled request,
Starting point is 00:23:00 I think you can say don't let them have the typo squatting hacker version. Yeah. So these sorts of solutions are pretty interesting to be able to have basically a cache of IPI stuff and then also your own stuff. So you push to it just like often you publish it. I don't know about this one, but often some of these you use Twine or something to push just like you normally would.
Starting point is 00:23:24 But it doesn't go to ipi it goes to your own thing yeah it's pretty neat you know it reminds me of artifactory which people might have heard of which is looks really cool however if you look at like the pricing it starts at you know just two thousand nine hundred dollars a year right for the base version the pro version is fourteen thousand and it goes up from there. So, you know, this looks like one of those cases where one of these cloud services from places like AWS and so on is coming along and going, you know what? We got you. And it's not $14,000 a year or whatever. Or a month. I don't know. Whatever the unit was I said there.
Starting point is 00:23:59 Per year. I think, to some degree, I believe GitHub is working on something like this as well. I can't remember what degree, I believe GitHub is working on something like this as well. I can't remember what it's called over GitHub, but it doesn't have Python yet, which is why I haven't jumped up and down about it. But I think it will. I think they're working on it. Well, supposedly, like, Warehouse was something you could just use that is used for, well, I guess they don't call it Warehouse anymore, but... PyPI.org, the new PyPI.
Starting point is 00:24:22 Yeah. So, I think that you can deploy that yourself, but I haven't seen very many people like, well, one, I'd like to see people write instructions on really how to get that up and running for yourself. And I'd also like to see some like, you know, warehouse as a service sorts of things. I mean, why not?
Starting point is 00:24:39 Some free money laying on the table there, people. Yeah, that's a good point. That's right. All right, what's this last one? I wanted to bring up Invoke, and it's at, what, piinvoke.org is where you can see the documentation
Starting point is 00:24:51 for this, and to tell you the truth, we've had it on our list for a while and I've tried several times and couldn't get it to work, but I had some confusion, so my confusion was the product, when you install it, you install it with pip install invoke, not with the Py part. But there is a Py invoke on PyPI, but it does something different.
Starting point is 00:25:13 So the invoke that I'm talking about is invoke without the Py in front, but the website is pyinvoke.org. Okay. If you're confused, I'm confused, but we've got it in the show notes. But why do we care about this? We care about it because it does make me feel, I like make files. I think make files are fine. There's parts of them I don't like. Like, I don't like the tab.
Starting point is 00:25:37 Like, it's the only thing in my life that I have to use tabs for because I usually use spaces in Python. But make files have tabs. And often things like cleaning out, you're building your documentation or kicking off your tests or deploying or a lot of those other book maintenance things for a project you put into a makefile. And some people use talks for that and you can, but invoke is intended to do that sort of thing,
Starting point is 00:26:03 but with Python code. So with invoke, you just create a little task.py file with these little types. You just have little functions that you decorate with the at task decorator. If you have it installed, you can just say on the command line invoke and then the name of the function. So if you have a build function, you can say invoke build and you can pass in command flags to it. And it's just pretty easy to run something. So something like you would use make files for, you can have it without any make files.
Starting point is 00:26:34 Yeah, that's cool. And you get to write Python for your scripting, right? Basically. Yeah. The project looks like, I'm not quite sure if this is recent or old. It says that it was intended for building documentation, but it does look like there's some examples on how to combine it. I don't see why you couldn't use it to run your tests
Starting point is 00:26:52 and run all sorts of other stuff too, because it's got things like you can run Python code, but you can also run command line. It can launch a command line tools and all sorts of stuff. Yeah, if you can run stuff off the command line, then you could do get pre-commit hook type stuff or all kinds of automation, or even like cycle the version,
Starting point is 00:27:13 like increment the version numbers and all kinds of stuff you want to put together. Oh, yeah, that'd be a good thing to put in there, version incrementing. And then also just like things like deploying, like check linting, that's a good thing. And then you can, so make fun linting. That's a good thing. And then you can make fun. One of the neat things about make is that different make targets can depend on each other.
Starting point is 00:27:31 And this one has dependencies as well. You can have, like, for instance, build can depend on clean. And it can have to run off and do a different target. And you can make a whole mess of stuff in there. Or you could keep it clean. But I like things like this that to have i mean one of the reasons i'm not even i don't mind make files but people that are not from a unix or don't come from a unix background have no idea what to do with a make file yeah it's good for the team to make it easy for them yeah yep indeed all right that's pretty
Starting point is 00:28:00 cool i'd like to use this and i just got to think of a reason a use case for it and i will it looks great though well that's all of our six items actually i've been like totally swamped at work i don't have a lot of extra things to share with people do you have anything extra for us i have a mystery that we can discuss you have a mystery yeah apparently you just talked you talked about python 3.9 and it's in beta which means it's getting no new features it's just getting tested and ironed out and uh there was python 3.9 beta 1 and then there keto announced oh hey everybody here's python 3.9.0 beta 3 is out for immediate testing and somebody uh disappeared beta 2 so the problem apparently with beta 2 was somehow the way that it looked up certificates was busted so if you like installed it from source and just ran it it would be fine but if you
Starting point is 00:28:55 installed it from the installer all of a sudden every web request that went to https or something along those lines would fail so that's not good to break the networking subsystem of Python because a lot of things depend on that. And so they quickly ditched that one and fixed it and rolled out beta 3. And just about the time that this is released, so on June 29th, we'll have beta 4, which presumably will still make web requests successfully and won't have to be disappeared.
Starting point is 00:29:23 So anyway, just some beta Python three, nine news, beta three is out. Beta four will be out days after this comes out or actually maybe even before. So there is no beta two before we'll be after, before we'll be, before,
Starting point is 00:29:36 before we'll be before I think, but it might be after, I'm not sure. So I've got a joke for you. I grabbed here off of Geek and Poke, which is like a cartoon strip. Okay. All right. So it's a mom and a son and you have kids.
Starting point is 00:29:57 I'm sure you know how this goes. How was your day? Good day? Yeah. What did you learn at school? Not much. You were there for eight hours, continuously getting instructed. Good day? Yeah. What did you learn at school? Not much. You were there for eight hours, continuously getting instructed,
Starting point is 00:30:11 like you didn't learn more than like half a set. Yeah. Right. But if this child happens to be a geek, there's another ploy in which you can employ, another technique you can employ to get them to tell you more about their day. So it goes like this. It says, hi, Darlene, how was your school day? And like sort of a blank stare. Hi, Darlene, how was your school day?
Starting point is 00:30:30 Dash, dash, verbose. Yeah, I totally wish I had verbose flags on my kids sometimes. Yeah. Also, sometimes a dash Q, like a quiet one, would be good sometimes too. Yeah, exactly. The dash, dash, quiet. If I got to pick one or the other, I'm going to go for the dash dash quiet as an option.
Starting point is 00:30:51 Yeah, especially for young kids. Yeah. Exactly. Exactly. Daddy needs a little peace, dash dash quiet. Yeah, definitely. All right. Well, that's it for the episode, I guess.
Starting point is 00:31:02 Yeah. Thanks a lot again. You bet. See you later. Bye. Thank you for listening to Python Bytes for the episode, I guess. Yeah. Yeah. Thanks a lot again. You bet. See you later. 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.
Starting point is 00:31:13 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.

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