Python Bytes - #302 The Blue Shirt Episode
Episode Date: September 20, 2022Topics covered in this episode: Can Amazon’s CodeWhisperer write better Python than you? Related and worth listening to: * Stable Diffusion breaks the internet w/ Simon Willison* Apache Superse...t Recipes from Python SQLite docs -ffast-math and indirect changes Extras Joke See the full show notes for this episode on the website at pythonbytes.fm/302
Transcript
Discussion (0)
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly
to your earbuds. This is episode 302, recorded September 20th, 2022. I'm Michael Kennedy.
And I'm Brian Ocken.
Hey, Brian. How you doing?
I'm great. It's a nice day.
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 going to be hard to go back to work after this podcast, looking out the window.
I give myself 50-50 chances of making it.
Yeah. I got to go back to the other screen.
That's right. I was 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 code whisperer so we've talked about uh i
think we've talked about github co-pilot before and i'm not sure if we talked about amazon's code
whisperer yet but um i don't think so okay Okay. So CodeWhisperer 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 CodeWhisperer 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 co-pilot sort of things and stuff. So Amazon's offering
looks like 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 description, 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
APIs. Actually, I think that that area makes kind of some sense. Although if you need an AI to
figure out the API, maybe the API is a little complicated. Just saying. But the discussion
is an interesting one through here about basically um, basically about the, the code that
it gets out. And it's, it's really not talking about the morals of it or anything. It's just,
uh, really talking about using it and how good it is. Um, the, uh, the punchline at the end.
So he, the, the author admits that the, um, uh, that the, the, the title was intended to be
clickbaity. Um, is it, and you know, which is cool.
I'm glad that it's 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 a, despite the click baby tile title, whether a 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 like that idea of, of, um, 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've, you now you're on your second draft already. 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 it's already, and he writes a description for a function that returns whether or not an item costs more than $10.
And it returns, it writes a function called expensive.
Like he didn't say expensive in the title at all.
That's interesting.
It said expensive and then it returns whether or not the unit price is greater than 10.
And it realized it was within a class. And so it used self.unitprice and not just some
unassociated function that returns greater than 10.
Yeah.
So it is interesting.
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 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 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 the total cost. It
just did it all in one function though. So I mean, I guess that's what he asked for.
But coming up with a total cost, which is computed, that's kind of interesting. Yeah.
Yeah. That is interesting. Yeah. And 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. 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 Willison called Stable Diffusion Breaks the Internet.
And this is focused on AI driven artwork, which is definitely interesting and an interesting conversation but in it um they talk
since these are all programmers they talk talk about how this the same sort of argument applies
around uh around code generation of the morality of it and and then aside morals aside and legal
stuff aside it's happening so how do you um sim, Simon 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 were still adding
value. And the original author of this article talked about this as well, of it's not about
really not thinking, it's about freeing up some of your brain space to do other things so
in interesting so yeah it is interesting 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 you know connect sq SQL Alchemy to a Postgres database,
and boom, it gives me, you know, create the metadata base class, and then create an engine,
and create a connection, and bind the engine, all those steps, right? Like, if you could just
kick that kind of stuff out, that's something you do once for a project, and 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 up that's kind of cool yeah i also like that i didn't think about this before and i think
github actually intended you to think about it like this with naming it co-pilot it's not intended
to take over your work but it's like sitting down with
somebody that kind of knows what they're doing and pair programming with them. You can't turn
off your brain, but maybe you can ease up a little bit. So anyway. Wait, before you close this,
scroll down to this black and white code editor. Boy, look at that. If you check out this article,
there is a, I don't even know what to make of it. Cause to me, it looks like a super retro earlys 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.
Yeah.
Well, he was talking about, um, the first recorded code completion appears in the Pascal
editor called Alice in 1985.
So yeah. And I guess that's it.
Well, that's a, that's a heck of an editor. Super cool. All right. Onto the next one. Yeah.
Two things real quick. I just want to point out or just sort of make a comment. It's not pointed 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 APIs is other people suck at keeping their APIs running.
They either decide, you know what,
this is costing me $10,000 a month
and I'm gonna have to charge for it, boo-hoo.
No, just kidding.
That's a reasonable reason to change,
but it changes like with the OpenWeather API
or like this one for this Twilio course I was using.
So I spent the morning,
a little bit of yesterday and this morning,
just doing a complete from scratch FastAPI API. And what a ton of fun it is to just work with
FastAPI 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 FastAPI, or you're building an API, you
definitely give FastAPI a look. There's a lot's 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 chameleon templates.
I mean, it's basically static,
but anyway, fun stuff and continues to be fun.
And so which course is this for?
This is for the Python powered chat apps
with Twilio and SendGrid,
which is actually a free course,
but it sets up a chatbot
that you order from like a bakery type thing over WhatsApp. And the problem is if you go to the APIs
that the WhatsApp thing was using, they just 500 or 404 or one of those two things, but neither,
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 super as that is, I want to talk about Apache Superset.
Okay.
Have you heard of Superset?
No.
Well, the word, I know.
Of course.
But Apache Superset is a modern data exploration and visualization platform.
And I came across that the other day and I'm like, what the heck is this? I haven't even heard of this.
It has almost 50,000 GitHub stars.
Okay. That's insane. I'm 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 Max Bushman,
also the creator of Apache Airflow,
which is pretty cool, right?
Yeah.
So this turns out to be a really interesting program.
And it's written in Python and TypeScript. It's like really front-end heavy
because it has 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 written in Python and TypeScript. It's like really front end heavy because it has 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 and data science tools you would know.
But it's not exactly a tool for developers like Jupyter is.
So Jupyter would be a way that data scientists who know Python would sit down and leverage
their Python skills to check out
data and explore things. 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 APIs and extensions and plugins in 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, I don't know what it is, but it's pretty. It's glorious,
right? Like it's a fantastic way to visualize. Here's 25 contributors to a stream over time.
You can sort of see like the growth of their contributions or not. And so 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 a computed field. 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
explore data like that. You can create these dashboards, these live dashboards to see what's
the state of our business today. And it even comes with a SQL IDE. All of this in the browser,
very Jupyter-esque. Pretty cool, huh? This is pretty neat, yeah.
Yeah, very, very neat.
And it connects to, I told you it was Python,
it connects to all of its databases using SQL Alchemy.
And so any database that can be a data source for SQL Alchemy,
obviously Microsoft SQL Server, Postgres, MySQL,
but things you might not think of like Vertica or Druid or Amazon
Redshift or Google BigQuery, all of these different data sources, Databricks are available
as a data source because SQL Alchemy knows how to talk to it. And this just leverages SQL Alchemy.
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 SQLite logo.
Yes. It's got a quill in it. Did you, did you know that before that it's a quill for SQLite?
Oh, quill. I did not put that together. No. How funny. Now we know. Cool. So 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 put in the GitHub repo and then went in there and said Docker Compose,
gave it the YAML file and said pull, and then up and off it goes.
So this is not a service.
This is just something you can download and run then?
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 Superset as a service.
So 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 get up stars, 10,000 forks. And I just learned of it. That's nuts.
Well, I mean, you know, go figure people actually want to know what's in their data.
I know weirdos. Yeah. It's so weird. What I think is cool about it is it,
like it lets you connect into your live operational data.
Not just like, oh, I downloaded a CSV and now I can ask questions.
You can just, whatever the current data is, let's get that and build a dashboard around it.
Pretty awesome.
Yeah.
Neat.
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.
You know what else is nice?
Tell me.
Microsoft for startups. They are friendly and looks pretty nice. You know what else is nice? Tell me. Microsoft for startups.
They are.
They are very nice.
So, yes, it's time to tell everyone about our sponsor, isn't it, Brian?
Yeah.
Let me tell you all about Microsoft for startups.
They created Microsoft for startups founders hubs to help give early stage startups the support that they need to be successful. If you are dreaming of or in these stages of an early stage startup,
you should go apply.
And the link at the bottom in the show notes is
buythombuy.fm slash foundershub2022, all one word.
Go over there and apply.
It's 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
thousands of dollars of cloud credits. You can get some to start. And as you make your way through
different stages of your life cycle, 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 don't 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 founders network where you can book one on one meetings with hundreds of different mentors, many of whom are founders themselves. They're 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 your idea a reality today
with the critical support from Microsoft for Startups,
Founders Hub.
Check them out at pythonbuys.fm
slash foundershub2022.
Thanks again to Microsoft for supporting our show.
Yeah, thank you.
Yeah, indeed.
All right, Brian.
Now, what you got?
Well, I want to share something
that Jeremy Page from the chat says.
I thought SQL,
always thought the SQLite logo was an homage to TCL
and I've got the logo for TCL.
So maybe, I don't know.
Perhaps.
Interesting.
But I wanted to talk about recipes from SQLite again,
recipes from Python SQLite docs.
So this is kind of a,
this is an article by, I wrote it down,
I promise I did, Redouan Delawar, cool name.
So this, he was going through the sqlite uh three
docs and 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 um decided to write out some of the examples
his little code snippets and i really like this if. If you're learning SQLite 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 you could put user-defined
functions in databases, but I haven'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 a hash,
hashes it before it stores it.
That is cool.
I never knew you could do that.
Here's a Python function
passed over as part of,
passed over to SQLite
and then the SQL statements can call it.
That's real cool.
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 also that's fantastic that that's being shown because that's the
parameterized then the anti little bobby tables version okay which is the the best practice right the alternative is something worse yeah um and
then uh you know aggregate functions which uh kind of got lost here but there's a whole bunch of
really cool examples of uh using uh using sqlite and and they're really tiny examples and so the
one of the other things i wanted to 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'd probably add, of course, is if you're going to
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 little function. So just
rerun the failed tests until, until I understand it. Yeah. Oh yeah. Very cool. Anyway. All right.
How about something we don't understand? Okay. 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 Brandon Dolan-Gavit. 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 gevent or pandas, one of those, numpy, that then bundles it into a wheel. And apparently
there's a bug in one of the 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. All right. 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.
Well, it changes it for the entire program,
AKA your program.
That doesn't sound great, does it?
No.
So let's dive in this.
So the article is called
Someone's Been Messing With My Subnormals.
Subnormals, I suppose,
being an aspect of floating point computations.
So here he is in Python 3.8.
And he says, from transformers, import code gen for causal LM.
And that's all they wanted.
This is in IPython terminal.
And it starts bumping out all these warnings.
NumPy core get limits.
User warning, the value of the smallest subnormal for class NumPy.float32 type is zero.
Over and over and over, these start popping out.
It's like, hmm, well, warnings about floating point numbers sounds bad.
What do you think?
Yeah.
Hmm.
So it turns out that something, not NumPy, but something that is in this library was compiled with this dash FF math
dash fast flag. When it got imported, it changed how numpy was working. Okay. So, uh, it says,
what were the problems? It says, well, it changes the floating point, uh, 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
with my first computer to get a 486SX 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 says for some algorithms that depend
on the behavior and will fail to converge if it's set to treat this different. So it uses the FTZDAZ flags in the MXCSR register.
That's part of the part that I don't understand.
I don't work that low level.
But it turns out it's not ideal.
So it 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 to figure out,
well, what processes are doing this weird stuff.
And also apparently if you compile with a dash, OFAST, it also like cascades over to having the same behavior.
So there's some explorations, like you wrote some C code and then imported it into Python
and it seemed all fine.
And then did the same thing with OFAST, enabled you to 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 a event-based async IO networking library. But somehow
something was using it. And when it got imported, it freaked everything out. So then the question
becomes, well, if G 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, it 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 test he was
using before was super slow. So anyway, it's not ideal. I think
there was something like 49 different packages. Let's see. I wrote it down up here. I'll get this
number right. Yeah, there's 49 packages on PyPI that were built with this flag. However,
thousands of packages use those libraries and hence were also subject to that behavior with 10 million downloads in the last 30 days.
So that's pretty nuts, huh?
Well, I mean, you're kind of scaring me.
So how do I know if I need to care?
I guess, you know, I are doing iterative floating point math that 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.
Should be fine.
Right.
But if you're doing.
Well, you got to test, got to test your code.
And I guess we have to test our math as well.
I just sort of trust that a lot of that works.
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 of here of packages.
Let's see.
I'll just read some out.
People might know.
So for example, G event, G event, G event, ACB client, flask, socket IO, Dagster, which
is used in data science a lot for like data engineering.
WebSocket, G-Event WebSocket.
Locust for testing.
Interpret.
Hi Kafka and on and on. Locust plugins.
Parallel SSH.
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, Alvaro says,
run your test with the dash W error,
which you should be anyway.
So cool.
So warnings treated as errors, basically.
Yeah.
Yeah.
Or set that particular one to be a warning.
All right.
Well, I guess that's it for our four items that we're covering today.
I'm right.
Yeah.
I was just, I was, I was giggling during part of that.
Cause I, 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 understand most of his words. Oh, don't worry about him. He's subnormal. I don't know.
I also, I also like the title of the overall blog, push the red button, push the red button
for a research, uh, malware reverse engineering, pentesting blog.
Yeah.
Nice.
Nice.
All right.
Well, how about some extras?
Yeah.
You got for us.
Um, I don't have anything I want to show, but, um, just gonna say a couple things i've been up to um i've been thinking about
change logs a lot and for on test and code instead of doing like a one episode on change logs i
thought i would talk to several people and do an npr style combined yeah nice yeah so it might it
might end up being a series of episodes that I'll release together or one long episode.
I'm not sure yet.
But basically, I'm thinking about changelogs a lot.
The other thing I've been doing is thinking about,
so we had that PyTest course out, right, last week?
We did.
Which is awesome on TalkPython training.
And it's cool. Anyway, TalkP anyway talk python training i always get to it by
just remembering that i switched that and just say training.talkpython.fm and you can get there
but um but i've had some requests to take some of the content and uh change it for individual teams
so and this is an interesting thing to me to to to, and to think about, to say, cause 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 a 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 just 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 pythontest.com and under training,
check me out.
Yeah, awesome.
Yeah, there's a lot of ideas in that course
that can be applied to different industries.
Different ways, yeah. Yeah, there's a lot of ideas in that course that can be applied to different industries. In different ways, yeah.
Yeah, different ways for sure.
Awesome.
Yeah, so the PyTest 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 TalkPython Training.
And the idea is there's all these different choices.
I mean, we just talked about Superset today and throw that in as another thing in the
pile of general visualization tools, right?
So you might do MapPlotLib 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 MapPlotLib, Seaborn, even Pandas and Plotly and Streamlit. 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.
Talkbython.fm.
Click on courses.
Ooh, this is definitely useful.
I got a project that I need this for.
Yeah, this is going to be a good one.
It is a good one.
I've already seen it.
I've seen it several times, actually.
But it's good.
Let me see.
Do I have any more extras I want to give a shout out to?
No, just those two things.
And then 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 you're hating a little on Python. So here's somebody says me laughing at
all the Python hate on this sub Reddit as I study C sharp, silly language. Come on. We all know C
sharp is better.
And then, as 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 Python.
Oops.
That's very fun.
Well, now I want to go over to the C Sharp subreddit
and see if I can find some anti-Python jokes.
I know. Wouldn't that be good? All right. Well, that one's pretty good. And then were you
affected by the recent, we have for people who are not in our area in Pacific Northwest, there
was a massive windstorm, like 30, 40 mile an hour wind, 25% humidity, a hundred degrees. It was like
if somebody threw a cigarette out the window, the entire Pacific Northwest would just go
and instantly catch fire.
It was like, it was insanely bad.
And so we had our power turned off in the West Hills here
because the trees were so likely to fall over
and cause a fire from knocking over.
So they just cut the power for like a little bit.
They also did that in California.
There's like a big, it's a bit of an irony.
Like one day they said, we're going to only allow the sale of electric cars after 30, 35 or something or whatever the date is. I mean, I'm, I'm in support
of that. I'm a fan of electric cars and all, but like the next week they said, oh, we're going to
turn off your power. Cause actually I think the electric cars might help balance it out. But
anyway, but in our irony, 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, this is for California, the governor has declared a state of emergency
and asked all Californians not to run NPM install between 4 p.m. and 9 p.m. today in
an effort to save energy and fight this wildfire danger. That's awesome. Isn't that good? Yeah.m. and 9 p.m. today in an effort to save energy and fight this wildfire danger.
That's awesome.
Isn't that good?
Yeah.
Yeah, I love it.
So that's the two jokes I got for you.
Yeah.
Nothing too deep.
Well, then also, you missed one.
There was like the build on of that.
All right, tell us about it.
Okay.
Governor declares a state of emergency and asked all Californians to not run a WasmPack build between 4 p.m. and 9 p.m.
Exactly.
Nice.
Cool.
And John Sheehan says, it's funny because it's true.
Didn't you just talk about the other day about Ruff and having our Python tools faster, like the JavaScript community is being concerned about faster tools.
Maybe not everywhere.
Maybe not 100%.
Maybe not everywhere.
Yeah.
Awesome.
All right.
Well, good episode as always.
Thank you.
Thank you.
We'll talk to you next week.
Yeah.
See you next week.
Thanks, everyone, for listening.
Bye.
Bye.