Brought to you by Michael and Brian - take a Talk Python course or get Brian's pytest book


« Return to show page

Transcript for Episode #302:
The Blue Shirt Episode

Recorded on Tuesday, Sep 20, 2022.

00:00 Hello, and welcome to python bytes where we deliver Python news and headlines directly to your earbuds. This is episode 302. Recorded September 20 2022. I'm Michael Kennedy.

00:13 And I'm Brian knockin.

00:14 Hey, Brian, how you doing?

00:15 I'm great. It's a nice day.

00:17 Yeah, it is a lovely fall day here in the Pacific Northwest dry as can be. I just had a very nice walk with my dog. Nice. It's gonna be hard to go back to work after this podcast and looking out the window. I give myself 5050 chances of making it.

00:31 Yeah, I gotta go back to the other screen.

00:34 That's right. Oh, I'm going to be looking that way. Awesome. Well, before we kick off the show, I also want to say thank you once again to Microsoft for startups. They're sponsoring this episode again, and huge supporters of the show. tell you more about that later. Brian. Could you just whisper to me about your next project here?

00:53 Code whisper. So we've talked about, I think we've talked about GitHub copilot before? And I'm not sure if we talked about Amazon's code whisperer yet, but I don't think so. Okay, so code Whisperer is a similar kind of thing. I think I haven't tried it myself, actually. But there's an article by Brian Tarbox that says Can Amazon's code whisper write better Python than you. And it's interesting, I brought this up, because I've been thinking about it a lot about these AI, copilot sort of things and stuff. So Amazon's offering looks like it's a it's almost I don't know, if it's a similar sort of model in this example that he's giving. He has a bunch of examples. He's going through, you write a descript, he's writing a description, I don't know if this is the only way but basically describe the function you want, like function to open an s3 file, and it writes one for you and even titles it so you give it a code comment, and it like pops out some code. Now for this is kind of an interesting thing around especially around Amazon services, because there's a lot of Amazon services and you know, you do a lot of API lookups and stuff. So some help directly around API's. Actually, I think that that area makes kind of some sense. Although, if you need an API to figure out the API, maybe the API is a little complicated to say ugly. But the discussion is, is an interesting one through here about, basically about the code that it gets out. And it's really not talking about the morals of it or anything, it's just really talking about using it and how good it is. The the punch line at the end. So he the author admits that the that the title was intended to be click Beatty, is and you know, which is cool, I'm glad because of the internet. Yeah. But despite that, he in walking through it, he he thinks that it's actually it's just making him a little bit better, because it's more efficient. And I'd like to quote a little bit, it's, despite the click Beatty title, title, whether code whispers code is better or worse than mine is that at the margins, and not really important, what is significant is that it has the potential to save me a ton of time and mental space to focus on improving refactoring and testing. It makes me a better programmer by taking on some of the undifferentiated heavy lifting. And I kind of liked that idea of of, it kind of takes away the blank cave Canvas situation of like, you know, it might show you how it might one way to do it, and you can look at it and go, Oh, no, I wouldn't do it that way. And then you can change it. But you now you're on your second draft already, instead of so it's letting the AI do the first draft. It's kind of a neat idea. I was looking he did this data class one, for instance, this kind of blew me away. He's got an inventory item. And and it's already any writes a description for a function that returns whether or not an item costs more than $10. And and it returns. It writes a function called expensive, like he didn't say expensive in the title at all, but are in this interesting crunching, it said expensive and then it returns whether or not the unit price is greater than 10.

04:19 And it realized it was within a class and so it used self dot unit price and not just some unassociated function that returns greater than 10.

04:28 Yeah. So it is interesting. Yeah, yeah. Anyway, interesting discussion. And then also interesting looking at the code, he tried it against test code he said I want to function the test the inventory class. Well, one I think it was probably maybe this was a prompting problem. You shouldn't have one function to test an entire class. My my my druthers, but it did a decent job of at least giving you a first start of like, one of the things to test is you need to test the expensive thing you need to function you need to test is the total cost? It just did it all in one function though. So I mean, I guess that's what he asked for. But

05:04 coming up with the total cost, which is computed, that's kind of interesting.

05:08 Yeah. Yeah, that is interesting. Yeah. In

05:11 the base item, it has a unit price of $10. And there's five of them. And so in the test, it asserted, the total cost is 50.

05:18 Yeah, definitely interesting. Interesting to definitely look at and good. And it might help you think about other test cases around it. So So I guess, cool. I wanted to point out while I'm thinking about it, one of the reasons why I brought this up is I just listened to a changelog episode with Simon Wilson, called stable diffusion breaks the internet. And this is focused on AI driven artwork, which is definitely interesting and interesting conversation. But in it, they talk since these are all programmers, they talk talk about how this the same sort of argument applies around around cogeneration of the morality of it. And and then aside more morals aside, when legal stuff aside, it's happening. So how do you, Simon, come brings up the term of basically just, you need to be one level of abstraction above the AI system. So just to make sure that you we're still adding value. And the original author of this article talked about this as well. It's, it's not about really not thinking it's about freeing up some of your brain space to do other things. So interesting.

06:27 So yeah, it isn't our saying. I mean, there's certain things that you probably don't just don't need to remember, you know, I'm thinking of, Do I really need to remember all the steps in the connection string schema for connecting to SQL alchemy? Probably not. I could just say, connect to SQL, connect SQL alchemy to a Postgres database. And for me, it gives me, you know, create the method beta, the metadata base class, and then create an engine and create a connection, and you bind the engine, all those steps, right? Like, if you could just kick that kind of stuff out. Let's have the you wants for a project that you just never do. It's not like, boy, I'm sure I'm not good at connecting to SQL alchemy. I'm just not a good programmer, I guess, right? You look it up, you put it in there, and you go, and so if you didn't have to take the step of looking at that's kind of cool.

07:13 Yeah, I also liked that. I didn't think about this before. I think GitHub actually intended you to think about it like this with naming it copilot. It's not intended to take over your work, but it's like sitting down with somebody that kinda knows what they're doing and being in pair programming with them. You can't turn off your brain, but maybe you can ease up a little bit. Anyway,

07:34 wait, before you close this scroll down to this black and white code editor. Boy, look, look at that. And if you check out this article, there is a I don't even know what to make of it. Because to me, it looks like a super retro earlies Mac OS like Mac OS one type of UI, but then the file is C colon backslash CD. It's just a mix of like beautiful, retro.

07:55 Yeah, well, he was talking about the first recorded code completion appears in the Pascal editor called Alice in 1985. So

08:05 yeah, I guess that's it. Well, that's, that's a heck of an editor. Super cool. All right. On to the next one. Yeah. Two things real quick. I just want to point out, sort of, I'll make a comment. It's not point out. This morning, I had to make a new API, because one thing I've learned about writing courses that depend on other people's API's is other people suck at keeping their API's running. They either decide, you know, does it costing me $10,000 a month, and I'm gonna have to charge for it, boo. No, just kidding. That's a reasonable reason to change. But it changes like with the open weather API, or like this one for this Twilio course I was using. So I spent the morning a little bit yesterday. And this morning, just doing a complete from scratch fast API API. And what a ton of fun it is to just work with fast API and get to build out all sorts of neat, neat little things. And so you know, I just want to shout out if you're, if you're building something with fast API, or you're building an API, you can definitely get fast API. Look, there's a lot a lot of neat things you can do to put together like here's a whole little website, it even does CSS and images and sort of sort of chameleon templates, me is basically static. But anyway, fun stuff continues to be fun.

09:14 And so which which courses this for is it for

09:18 the Python powered chat apps with Twilio and SendGrid, which is actually a free course. But it sets up a chat bot that you order from like a bakery type thing, okay, over WhatsApp. And the problem is, if you go to the API's that the WhatsApp thing was using, they just 500 or 4041 of those two things that neither of which is super useful for the course. So I recreated it in fast API this morning, which is cool. Now it lives on the internet. But that's not what I want to talk about as supers that is I want to talk about Apache superset.

09:49 Okay, have you heard of superset? No. Well, I know of course,

09:53 but Apache superset is a modern data exploration and visualization platform and I came across that the other day and Like, what the heck is this? I haven't even heard of this. It has almost 50,000 github stars. Okay, that's insane. And is put together by back. Max Bushman, cool. Also the creator of Apache Airflow, which is pretty cool, right? Yeah. So this is this turns out to be a really interesting program. And it's written in Python. And TypeScript is like really front end heavy, because as a lot of visualizations and stuff, right, but all the backend stuff, it's all the things that you would know, it's flask, it's Redis, celery, many of the pandas data science tools, you would know. But it's not exactly a tool for developers like Jupiter. So Jupiter would be a way that data scientists who know Python would sit down and leverage their Python skills to check out data and exporting. This one is really almost meant for like people who would say, I'm going to fire up Excel and see what's going on. Or I'm going to fire up some BI tool like Tableau and I want to look at it a little bit and see what's going on. And it's also open source and written in Python, which means it has API's, and extensions and plugins, and Python, which is pretty excellent. So it has a way to explore your data like Brian, look at this picture. What do you think it's,

11:12 I don't know what it is. But it's pretty, it's glorious, right? Like, it's

11:14 a fantastic way to visualize, or here's 25 contributors to a stream over time, you can sort of see like the growth of their contributions or not, instead of the way you generate this is you just connect it to a database, it gives you the table, you say, make a chart out of this database, and you draggy, Droppy, the pieces over and boom, there it goes. And it doesn't have to just be the data in the database, it can be computed fields. So you could say, I want to graph the sum of this join onto like, the orders of each customer, or I want to see the max order for each customer, you know, things like that, right? So that's pretty cool. So you can export data like that. You can create these dashboards, these, like live dashboards to see what's the state of our business today. And it even comes with a sequel IDE all of this in the browser. Very Jupiter esque. Pretty cool.

12:04 Pretty neat. Yeah, yeah. Very, very

12:07 neat. And it connects to toasters, Python, it connects to all of its databases using SQL alchemy. And so any database that can be a data source for SQL alchemy, you know, obviously, Microsoft SQL Server, Postgres, MySQL, but you know, things you might not think of like Vertica, or druid, or Amazon Redshift, or Google BigQuery. All of these different data sources, data bricks are available as a data source because sequel alchemy knows how to talk to it. And that's just leverages sequel alchemy.

12:37 Yeah. Hey, hold it there for a sec. One of the things I learned recently, which I don't know why I never got this before, but look at the sequel lite logo. Yes. It's kind of like a middle in it.

12:47 Did you guys,

12:48 did you know that before that, it's a quill for SQL Lite. Oh, Quill,

12:52 I did not put that together. Now. How funny. We know. Cool. Anyway, yeah, people can check this out. It's kind of a little bit intense to run, you can pip install it. But probably the better way to do it, if you want to just try it out is to install it locally with Docker. So for me, for example, I just cloned the GitHub repo, and then went in there and said Docker Compose, gave it the Yamo file and said, pull and then up, and off it goes. So this

13:20 is not a service. This is just something you can download in your Brendon.

13:24 It's something you can download and run, but it has a lot of infrastructure bits clicking together. Okay. And so when I interviewed Max Bushman, he actually is now the CEO and founder of preset, which is super set as a service. So if you want to, if you want to have someone else host it for you, you can go check it out with them, right. But it's also a thing, you can just run yourself, but look how popular it is almost 50,000 github stars 10,000 forks, and I just learned of it. That's not

13:52 Well, I mean, you know, go figure people actually want to know what's in their data.

13:56 I know. Weirdos. Yeah. So weird. What I think's cool about it, is it like it lets you connect into like your live operational data, not just like, oh, I downloaded a CSV. And now I can ask questions, right? You can just like whatever the current date is. Let's get that and build a dashboard around it. Pretty awesome. Yeah, yeah. All right, well superset. If people need an alternative to Excel or bi or Tableau or whatever, check out superset. It's very, very Python friendly, and looks pretty nice.

14:23 You know, it also is nice. Microsoft for startups.

14:28 They are they are very nice. So yes, it's time to tell everyone about our sponsor isn't O'Brien. Yeah. Let me tell you all about Microsoft for startups that created Microsoft for startups founders hubs to help give early stage startups the support that they need to be successful. So if you are dreaming of or in the stages of an early stage startup, you should go apply and the link at the bottom in the show notes is by the mindset FM slash founders hub 2022 all one word go over there. Apply is completely free to apply. You don't have to be third party verified, you don't have to be VC funded. If they think your startup has merit, you're in the program program comes with many 1000s of dollars of Cloud Credits, you can get some to start. And as you make your way through different stages of your lifecycle, you get a bunch more. But what's maybe even more important is access to their mentorship network. So there's a reason that Silicon Valley is the heart of so many startups. And it's not just, you know, the nice weather, if anything, I'll encourage people to go outside and not work on their projects, right? It's the network and it's the connections. And if you live somewhere else, or if you're not in that space, it's very hard to get connected with the right people to make the right steps, right. So this program will get you set up there. So in addition to all the Cloud Credits, and so on, you have access to this founder's network where you can book one on one meetings with hundreds of different mentors, many of whom are founders themselves that are experts in areas such as idea validation, fundraising, management, and coaching, sales and marketing. That's the one that's the toughest. I think, if you can nail that you're golden. So make it a reality day with a critical support for Microsoft for startups founders hub, check them out at Python bytes FM slash founders hub. 2022. Thanks again to Microsoft for supporting our show. Thank you. Yeah, Andy, I, Brian. Now, once you got,

16:30 well, I want to share something that Jeremy page from the chat says, I thought sequel always thought the sequel light logo was an homage to TCL. And I've got the logo for TCL. So maybe, perhaps interesting. So. But I wanted to talk about recipes from Python, SQL Lite, again, recipes from Python SQLite Docs. So this is kind of it. There's a this is an article by wrote down, I promise, I did read Juan delar. Cool name. So this, he was going through the SQLite, three docs, on the Python docs. And there's a there's a lot of examples, but some of them don't have actual examples. It just talks about the API. And so he decided to write out some of the examples is little code snippets. And I really liked that. So if you're learning SQL Lite, or if you just want to learn, not SQLite, in particular, but databases, these are concepts that apply to a lot of things. So he's got, of course, whether or not you can execute individual statements or batch statements. So he's got little examples for that goes into. This is interesting, I thought was user defined callbacks, I thought this was really cool. For instance, a scalar function, he defined a and I knew that like, you could put user defined functions in databases, but I hadn't ever done that, really. He has a hash function, Sha 256, that creates a hash for passwords. And then he shows how to use that when he passes in a username and password into the database, how it turns it into hash hashes that it's before it stores it,

18:10 that's cool. I never knew you could do that. Here's a Python function passed over as part of passed over to SQL Lite, and then the SQL statements can call it. That's, that's really cool.

18:21 Yeah, I mean, there's a special syntax. So that's good that there's these examples of like, insert into user values, users values, and then this question mark and SHA 256. Question mark. So

18:32 also, that's fantastic. That that's been shown, because that's the parameterised, then the anti little Bobby Tables version, okay, which is the best practice, right? The alternative is something worse.

18:47 Yeah. And then, you know, aggregate functions, which kind of got lost here. But there's a whole bunch of really cool examples of using using SQLite. And in their really tiny examples. And so the one of the other things I wanted to share the reasons I wanted to share this article is, I think this is a really great way to learn an API or learn a service is to write these little example things in little code snippets and try it out. Try it out with a table that you're creating that only has two or three elements in it so that you can you can play with it. And and you can get your head around what you think the answer should be. And what it does. The only thing I think I probably add, of course, is if you're gonna do little code snippets, these all have to be in separate files, right? Unless you just write test functions. So this is a great use for PI test. I use it all the time. If I'm learning something, I just do these little code snippets, but I do them within a test function. And then it can be it's not really testing anything except my own knowledge. But I can run them just by right clicking on the or clicking on the little arrow that the editor has for each function. So

19:53 just rerun the failed tests until

19:56 until I understand Yeah, yeah,

19:58 very cool. Anyway, All right, how about something we don't understand. Okay, over let me take you over to a weird world of cascading consequences. So there's this guy who is an assistant professor at NYU Tandon security and reverse engineering person named Brendan Dolan, Goblet of heat. And there's this tweet here over to his blog post saying a new blog post in which I download four terabytes of Python packages containing native x86 libraries, you know, something that's done some C++ thing like G event or pandas, one of those NumPy that then bundles it into a wheel. And apparently, there's a bug in one of those C compilers that if you pass dash f fast dash math, it will potentially alter the floating point behavior of your program if you compile it with that. Alright, so we're in Python, we don't compile things that often what do we care? Well, what this does is it reconfigures how the process uses like some low level registers, but some feature of the CPU on how it does floating point math. And because when the library is loaded, it changes that feature, while it changes it for the entire program, AKA your program. That doesn't sound great does it? Now so let's let's dive in. So the article is called someone's been messing with my sub normals, sub normals, I suppose being an aspect of floating point computations. So here he is in Python, three, eight, and he says from transformers import code Gen for causal LM, and that's all they really wanted. This is in IPython terminal, and it starts pumping out all these warnings. NumPy core get limits user warning, the value of the smallest sub normal for class NumPy dot float 32 type zero over and over and over the start popping out. It's like, well, warnings about floating point numbers. Sounds bad.

21:56 What do you think? Yeah.

21:58 So it turns out that something not NumPy. But something that is in this library was compiled with this dash f f math dash fast flag when it got imported, it changed how NumPy was working. Okay, so says what were the problems? It says, well, it changes the floating point unit behavior that's on the CPU, the actual fpu. I remember when by the way, CPUs didn't come with that, like I was trying to decide for my first computer to get a 46 SX or dx, and I got the dx because it came with a floating point unit on the CPU. Anyway, that thing gets messed with. And so it's for some algorithms that depend on the behavior and will fail to converge if it's set to treat this as different. So it uses the FTZ de ese flags in the MX CSR register. That's part of the part that I understand. I don't, I don't work that low level. But it turns out, it's not ideal. So I said, Well, what is actually going on here? And apparently, there's a way there's a whole bunch of stuff, how you can search through Linux and whatnot, figure out what processes are doing this weird stuff. And also, apparently, if you compile with the dash O fast, and also, like cascades over to having the same behavior. So there's some explorations like wrote some C code, and then import it into Python, and symbol fine, and then did the same thing with Oh, fast enabled, you get all these warnings? I've never seen this warning. So I guess that's good. But it turns out, the culprit was G event of all things, which is event based async IO networking library. Yeah. But somehow, something was using it. And when it got imported, it freaked everything out. But then the question becomes, well, if geven je event can be causing these problems, because somebody thought it was awesome to compile the fast version, not the slow version, what else is out there? So Brandon went through and decided to download four terabytes of wheels, for all the things that might have some kind of x86 binary in them. And then there's a ton of analysis of trying to figure out like, Well, how do you actually look for and find whether or not this program has this feature? Or not, turns out to be pretty tricky. So there's a bunch of stuff about going through to just check to see like, what, how do you test it for this many packages, because the tests he was using before were super slow. So anyway, it's, it's not ideal. I think there was something like 49 different packages. Let's see, I wrote it down up here, get this number right here. There's 49 package, there's 49 packages on pi pi that were built with this flag, however, 1000s of packages, use those libraries and hence we're also subject to that behavior with 10 million downloads in the last 30 days. So that's pretty nuts.

24:50 Well, I mean, you're kind of scaring me so how do I know if I need to care? I guess

24:56 you know, I I doing iterative floating point math. goes down to like very small things probably probably not. I don't think I need to care. I'm doing like I need. I didn't need to know what 33% of, you know, 69 is, right. But if you're doing

25:12 well, you gotta test good test your code, and I guess we have to test our math as well or just sort of trust that a lot of that works.

25:19 Yeah, I suppose you would see those warnings. Right, that about the floating point. Okay. subnormal coming in. Okay. Yeah. So there's a great long list here of packages. Let's see. I'll just read some out people might know. So for example, G van G event, event ACB client flask socket, IO Daxter, which is used in data science a lot for like data engineering, web socket, geo event, web socket, locust for testing, interpret pi Kafka and on and locusts plugins. hairloss is age, right? So it doesn't matter if you're using that library for the math. Just if it gets imported, it changes all the math of the program. So anyway, there it is. People can check it out. The comments are pretty glowing about this research. Matthew Adams, for example, says crazy awesome work, bro. You should be knighted for this. In our chat,

26:15 Alvaro says run your run your tests with the dash W error which you should be anyway. So cool.

26:21 So warnings treated as errors, basically. Yeah, yeah. Or set that particular one to be warning. All right. Well, I guess that's it for our for items that we're covering today.

26:31 I'm right. Yeah, I was just I was I was giggling during part of that because the subnormal just cracking me up like, like, why is Why is Brian talk like that? I don't understand most of his words. Oh, don't worry about him. He's subnormal. I don't know. It's

26:49 also like the title of the overall blog. Push the red button, push the red button for research, malware, reverse engineering, pen testing and blog. Nice. Nice. Alright, well, how about some extras? Yeah, of course.

27:03 I don't have anything I want to show. But. But I was just gonna say a couple things I've been up to. I've been thinking about change logs a lot. And for untested code, instead of doing like, one episode on change logs, I thought I would talk to several people and do an NPR style combined. And so it might, it might end up being a series of episodes that are released together, or or one log episode. I'm not sure yet. But basically, I'm thinking about change logs a lot. The other thing I've been doing is thinking about so a we had that pi test course out, right. Last week, we did just awesome on talk Python training. And it's cool. Anyway, talk Python training, I always get to it by just remembering the switch that and just say training dot talk python.fm You can get there. But but I've had some requests to take some of the content and change it for individual teams. So and this is a interesting thing to me to end to think about to say because like in this course, we do a database and a command line interface. But we're mostly testing through the API, so API with the database application. So we're doing things, the layered things. But some people are like, well, I don't use the database. So maybe we could swap that out with an example that uses one of the resources we have. And more of our example. We don't do the API, we do these little we're testing something else. So like, okay, we can cover the concept. So it's a neat idea to try to focus that towards people. So I guess if you're interested in doing that, check out Python test.com. And under training, check me out.

28:40 Yeah, awesome. Yeah, there's a lot of ideas in that course. It can be applied to different industries, different ways. Yeah. Different ways. For sure. Awesome. Yeah. So the PI test course is going super strong. People really love it. Great work on that, Brian, I have another course to announce, because it's been a week. It's been a week. It's been a week. Python data visualization. So this is a course by Chris Moffitt over at talk Python training. And the idea is, there's all these different choices. I mean, we just talked about superset today and through through that is another thing in the pile of general visualization tools, right? So you might do matplotlib. Or maybe you want to use something new, like Altair. So this course goes through and shows you what it's like to do visualizations in these different frameworks, like matplotlib seaborne, even pandas and Plotly, and Streamlight. And then you can build out these different scenarios and say, well, in this case, it might make more sense to use matplotlib. Or I might choose Altair, and it'll help you choose a visualization framework, but also, it'll show you how to use all of them. So it's a nice broad exposure to all these different frameworks, so people can check that out. Puck python.fm click on courses.

29:47 Ooh, this this is definitely useful. I got a project that I need this for. So

29:51 yeah, this is gonna be a good one. It is a good one. I've already seen it. Seen it several times, actually. But it's good. Let me see. Do I have any more extras I want to get Have a shout out to Noah. Just those two things. And then I have I have two jokes for you this week because one is not enough. No, yeah. The first one here has to do with people who maybe learned a different language maybe or hate and a little on Python. So here's somebody says, me laughing at all the Python hates on this sub reddit as I study C sharp as silly language. Come on, we all know C sharp is better. And then that's it like a smiling laughing person. And then a more seriously somewhat concerned, starting a new job and realizing on the job board 95% of them are asking for buying. That's really fun.

30:39 Well, that now I want to go over to the like the C sharp subreddit and see if I can find some anti Python. I know

30:45 we'd never be good. All right, that one's pretty good. And then were you affected by the recent we have for people who are not in our area and civic Northwest, there was a massive windstorm, like 3040 mile an hour, wind 25% Humidity 100 degrees, it was like if somebody threw a cigarette out the window, the entire Pacific Northwest would just go instantly catch fire was like was insanely bad. And so we had our power turned off in the West Hills here because the trees are so likely to fall over and cause a fire from knocking over to they just cut the power for like a little bit. He also did that in California, there's like a big bit of an irony. Like one day they said we're going to only allow the sale of electric cars after 31 a 35 or something, you know, whatever the date is, I mean, I'm, I'm in support. I'm a fan of electric cars and all but like the next week, they said, We're going to turn off your power because actually, I think the electric cars might help balance that out. But anyway, but over r&d, so this next joke has to do with that. So I got a hold of this from Kylie codes. And she highlighted this tweet that says the governor has declared it for California, the governor has declared a state of emergency and ask all Californians not to run npm install between 4pm and 9pm. Today in an effort to save energy and fight this wildfire danger. That's awesome. Isn't that good? Yeah, I love it. So that's that's the two jokes I got for you. Yeah, nothing too deep.

32:15 Well, then also, you missed one. There was a like the build on the bill.

32:20 I don't know. Tell us about it.

32:22 Okay, governor declared a state of emergency and asked all California has to not run wasum pack build between 4pm and 9pm. Exactly. Nice.

32:32 And John Sheehan says it's funny because it's true. Didn't you just talk about the other day about rough and having our Python tools faster? Like the JavaScript community has been concerned about faster tools? Maybe not everywhere? Maybe not? Yeah. Awesome. All right. Well, good episode, as always. Thank you.

32:56 Thank you. Well, next week.

32:58 Yeah. See you next week. Thanks, everyone for listening. Bye bye.

Back to show page