We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode #415 Just put the fries in the bag bro

#415 Just put the fries in the bag bro

2024/12/23
logo of podcast Python Bytes

Python Bytes

AI Deep Dive AI Chapters Transcript
People
B
Brian
Python 开发者和播客主持人,专注于测试和软件开发教育。
M
Michael
帮助医生和高收入专业人士管理财务的金融教育者和播客主持人。
Topics
Michael: 介绍了dbos-transact-py库,它提供超轻量级的持久化执行功能,能够在程序中断或崩溃后自动恢复。该库使用Postgres数据库存储程序的执行状态,并支持各种高级功能,例如计划任务和精确一次事件处理。其速度比AWS Step Functions快25倍,并集成了Open Telemetry进行可观测性。 还介绍了RightTyper工具,这是一个快速高效的Python类型助手,可以自动为代码添加类型提示,包括张量形状推断。它支持多种数据科学库,并与BearType和TypeGuard等工具兼容。RightTyper的性能优于MonkeyType等其他工具,可以有效提高代码的可读性和可维护性。 最后,Michael分享了在macOS系统中设置应用程序快捷键检查更新的技巧,以及Talk Python网站上一个巧妙的URL设计,通过在URL后添加后缀来直接访问缩略图和字幕文件。他还撰写了一篇详细分析文章,总结了Talk Python播客2024年最受欢迎的五集内容,并推荐了关于Python类型提示和工具的课程。 Brian: 讨论了Meta工程博客上的一项调查结果,该调查显示Python类型提示的采用率很高,但仍然存在可用性和表达复杂模式方面的挑战。Brian还介绍了使用uv库创建懒加载自安装Python脚本的方法,方便在各种操作系统上创建和管理单文件命令行脚本及其依赖项。uv库可以自动安装依赖项,甚至可以安装Python解释器,简化了脚本的部署和使用。 Brian还介绍了Talk Python Training提供的课程,并表示愿意为经济困难的学生提供折扣。最后,Brian参与了关于Python with Rizz的幽默编程语言的讨论,该语言使用一些非正式的关键词来替代标准的Python关键词,增加了代码的趣味性。

Deep Dive

Chapters
dbos-transact-py offers ultra-lightweight durable execution in Python, ensuring resilience against failures in long-running processes by storing the execution state in a Postgres database. It's significantly faster than alternatives like AWS Step Functions and provides features like scheduled jobs and exactly-once event processing.
  • dbos-transact-py provides ultra-lightweight durable execution.
  • It stores program's execution state in Postgres.
  • 25x faster than AWS Step Functions.
  • Offers scheduled jobs and exactly-once event processing.

Shownotes Transcript

Translations:
中文

Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds. This is episode 415, recorded December 23rd, 2024. And I am Brian Ocken. And I am Michael Kennedy. And we're excited that today's episode is sponsored by us. So check out TalkPythonTraining and Talk...

and python test.com where we have courses there. And also thank you to Patreon supporters. If you'd like to connect with the show and talk with us or give us suggestions to go on the show, look for the links in the show notes for all of the Mastodon or blue sky links. We check, we check those and, and,

We're on both of those. You think it's a little disingenuous that we have blue sky, even though we live in Oregon and it's winter and we haven't seen a blue sky for a very long time. Hey, I saw a blue sky like three days ago, four, maybe it was a couple of weeks ago. Okay. We have them once in a while. And if you're listening to this on your podcast player, thank you and share it with a friend.

And also, occasionally, it may be fun to switch over and watch us live. So go to pythonbytes.fm slash live, and you can see when we're going to record next. Except for on weird days like today where I contacted Michael and said, hey, can we record early? So we did. Well, it's Christmas Eve Eve, which makes the schedule a little wacky. Yeah.

And while we're on that, Brian, this is our last episode of the year. Next episode, we'll just put a little season's greeting or something. And so people have to appreciate this one for all of 2024, right? Because this is it. Yeah. Yeah. And I really had a fun this year. So I'm grateful for everybody to stick around. Stick it around and listen. Yeah, I am too. And the final thing I want to say is, if you haven't already, why don't you head over to PythonBytes.fm and...

and click on newsletter and sign up for the newsletter so that you can get all of the links that we talk about in the show and some commentary around it and some notes just delivered right to your inbox. So that would be nice. Everyone needs some artisanal notes. Artisanal notes, yes. Fresh Oregon artisanal made in Oregon. Probably still dripping wet. Maybe a little moss on it. Yeah, exactly. Well...

Why don't you take it off with the first topic, Michael? All right, let's do it. So I would like to talk about durable software. Honestly, this is something I don't hear a ton of in the Python space, so I thought I'd shine a little light. Both projects that I'm highlighting today for the main topics on my end are sub-500 GitHub stars. So they're used by people, but they're not major projects. But I think they could be really useful. And so I'm kind

I'm kind of shining a light on some up-and-coming ones, let's say. So the first one is dbos-transact-py. And the H2 is ultralight durable execution in Python. What the heck does that mean? What is durable? Like, does it have try except somewhere?

No, more than that. Way, way more than just error handling. So what you do, imagine, Brian, that you've got some long-running process. Like one step of this process is I want to wait until a file shows up in this directory. And then when it does, we're going to process it, save it over here. Some other system, maybe you don't have direct conversation, like direct connections with, does some things, processes it, gives you a response. Then you take on the next step. Like it's a long-running process.

It's not just going to happen all at once, right? And also it has to keep going. If it's long running and you've got to restart your server or you want to deploy a new version of the app or there's even a bunch of stuff if you're doing API style things where

the worker processes periodically get restarted for memory in case they get hung up just to keep them sort of fresh, right? So there's all sorts of reasons your long running thing might get shut down in the middle. So that's what this thing handles. So you write a Python function, you give it a workflow decorator, and then it calls a bunch of sub functions to do its steps. And they're

decorated with at step. And then what happens is when this runs, each step before and then basically what workflow is happening, what step is running, what data was passed into it is serialized into

uh postgres right and so if it crashes it just goes oh well what workflows i have going oh i see these and this one is at step five and here's the status so just run step five again and off it goes okay isn't that cool that's really cool it's not something i totally need all the time you know it's not something i feel like is a real common thing but if you were doing like a lot of email you're i'm sitting on an email process

Right. I'm, I'm managing myself, which no, I'm not, but well, I guess with less money and sort of indirectly it was the self-hosted thing anyway.

you're contacting a bunch of things or you're calling a bunch of APIs or you're uploading a bunch of files over an API, like over S3 or something. And the thing goes down, you could do this to just go, all right, well, where was I? Pick it up and keep going. So let's see, it says, all you need to do is use a Postgres database to connect to it. There's no need for a workflow server, which is cool. And apparently there's this thing called AWS step functions because of course there are at AWS. If there's any sort of possible way

type of programming or execution. There's a AWS service for it. Anyway, it's 25 times faster than that, which I guess is good. More cool features, scheduled jobs, run your workflows exactly once per time interval. So on job sort of deal. Exactly once event processing, use the workflows to process incoming events. For example, a Kafka topic exactly once. That's pretty cool.

In observability, all workflows automatically emit open telemetry traces. So anything that integrates with open telemetry, which is a bunch of the different systems out there, like air monitoring and sentry type things, plug that in. That's pretty cool. So it clearly works on the cloud. Could it work as a local thing as well? Yeah, it just needs a Postgres database. So if you could run a Postgres database, or if you could run Docker, then you could just run the Postgres image.

And, you know, it's the same, just same port, same connection stream. Cool. Yeah. There you go. Over to you. I was just thinking about like recently you mentioned going through and doing redoing a lot of the transcripts. Could it possibly do something like this to if it ever dies to restart? Yeah, exactly. If you're doing...

Or video file processing. Yeah. That's super common. You know, I want to run conversions for these files, but it's going to take two days. Yeah. The audience says, that sounds interesting. I've been trying to adopt Airflow for a particular set of scheduled jobs I have, but it's super complicated to set up. Yeah. Very cool.

I want to talk about a survey a little bit that I didn't know about, and I'm still a little confused. There's an article on engineering at Meta called Typed Python in 2024, Well-Adopted Yet Usability Challenges Persist. And I'll get into the topic a little bit, but I was...

a little confused by the survey. It says, this summer JetBrains, Meta, and Microsoft collaborated to conduct a comprehensive survey on the state of Python typing. And perhaps I just missed that or it wasn't the results were announced or maybe this is the announcement because this is not the JetBrains developer survey. This is something else. This is a survey that happened through July through August

beginning of October, I guess. Anyway, so back to the topic at hand. So the idea is 10 years after the introduction of PEP 484, I can't believe it's been 10 years, we surveyed the current state of Python type systems and the tools developers are using. And like I said, it was a JetBrains meta Microsoft thing. So the findings, 88% of respondents objected

or often use types in their Python code. The IDE tooling documentation and catching bugs are drivers for the high adoption of types in survey responses. So, and we'll get to the, there's a couple other things in here too, but I wanted to highlight this because like catching bugs, that's what I thought people would use this for, using PyPy or MyPy and other tools

other tools to, to check for type errors. Um, but I think that the big, the big wins are in documentation and IDE tooling. Um, I, I started using it for documentation primarily, uh, to document how somebody should use a method, um, to, and I think it's super helpful to say, yeah, it's going to be a list of strings that you're going to pass in here. Um,

It just helps to understand how, especially for non-obvious things. Is it going to be a tuple? Is it a list? I guess it doesn't matter. It's an iterable, but that's really helpful. Then the IDE tooling came out, came along and started making it a lot easier just to, to have type hints and everything work right. When using you now, I don't have to hop over to another screen or to

or another, like find the definition of a function to find out what's in there. I can get type hints to help me and the pop-up dialogues, whatever, what the code, what are those things called? Anyway. The ones where it's in a separate file? No, yeah. Well, like if you start typing a function and you hit print, and the ID tells you. Oh, autocomplete. Yeah, autocomplete stuff. It's really helpful to be able to know, oh yeah, it's going to,

going here. I wish that there was a way to shorten it because some stuff has so many, so I'm using all the time. And there's, there's so many arguments that it's like this big giant blob thing and it's not helpful, but anyway, but decrease your font size there, you know, maybe, or just like, yeah, just, uh, the standard library stuff that I'm using all the time. Don't keep popping that up. Uh, I don't need type pens for print just saying. Um, so, uh,

All right, I need type hints, I just don't need that pop up. Anyway, so interesting survey. One of the interesting things here was that people were using it even for personal stuff, just personal projects. 66% of respondents said they still use type hints always or often. And 78% of professionals, it makes sense it'd be more with your work code than personal code.

but I'm finding that myself. I'm using it even for personal stuff, using type hints. So a little bit of interesting things on which IDs are people using. It's a little different from the developer survey, but maybe they had a different set of lists that people could choose from. So mostly VS Code, PyTerm up there, plus Emacs and NeoVim. Emacs or NeoVim and other. But like the developer survey had mostly what?

So IDE was VS Code, PyCharm, Vim, Jupyter Notebooks. Anyway, so it had probably just more selection or something. I think there were many options in the PSF one. Yeah. The PyCharm was the same, but VS Code was smaller. Interesting. Yeah. It's a different audience as well. Who knows? Yeah. Anyway, yeah.

So the real takeaways here, though, for me as a trainer and other people that try to teach people is I think we need to do a better job at teaching. Some of the reasons why people are not using types are what we've got not required for my project, lack of familiarity. They're too complex. And it's hard to...

hard to use or set up and push back from coworkers or co-maintainers is the, is like 50, 50 people. Anyway. Oh, wow. It's not percent because the top is one 50. So I'm not sure what's going on here. So that's otherwise known as 33%. 34. I don't know. But the, what I found is that, that I,

I always run into something that's complex, like a PyTest fixture. I don't know. I still don't know how to type those correctly. But you can do type hints for most things. And if you run into complex stuff, just don't worry about it. Move on. That's my recommendation. You can go down that rabbit hole and try to do things. But I think that that's something that people...

people with train when training, we teach people how to use type hints in simple things like this. Hey, if it's an int, do this. But I think it's important to maybe say, Hey, sometimes it's complex. Just like there's, there's ways to do that, but you also don't need to worry about it. People can look up the docs for that. I do appreciate the, the addition of not having to import like capital list and capital, you

you know, whatever the other ones. Yeah. Dict and all them. Yeah. And you can just do lowercase list and dict and stuff like that now, which is better. That's three 10 and above. Yeah. So anyway, some interesting information here on the, on typing. Nice. Awesome. Well, you know what? I think we just more typing. Let's just, it's all typing all to close out 2024. So I would like to talk about write.com.

Okay. R-I-G-H-T, typer. A fast and efficient type assistant for Python, including tensor shape interfaces and data science thingies. So what the heck is this? So you're saying, Ryan, that a lot of developers will write types when they write their functions. But if you adopt a code base and it doesn't have typing...

Or you have some colleague who utterly resists it, resists adding types. Like I will not do this, but as a group you've decided, yeah, we're doing it. And somehow that person still works there. You could use this thing, right? So this would be good for old projects, just untyped projects, whatever. You know, a lot of examples of projects that didn't have typing were things that traditionally supported two and three, Python two and three. Oh yeah. Right. And like,

Like, well, we can't have types because we want to support Python 2. And now they're like, you know what? Take a hike, Python 2. Maybe it's time to add types to them, right? So that's what this thing could do. So what you do is you run your Python program. You say like Python 3 dash M write typer. And then you can even do it via testing. I've never seen a nested dash M. I love it. Okay. So Python dash M write typer dash M pytest dash continue on collect. All right. You could do that.

And what it will do in this case is it'll run all of your tests and it'll look at the data exchanged for each function. And then it will create the signatures of those functions with typing automatically. Oh, wow. Yeah.

So it efficiently computes type annotation coverage for files and directories in it and first shapes of annotations for data science thingies. Like I said, NumPy, JAX, PyTorch, et cetera, compatible with JAX typing, BearType and TypeGuard. We've covered BearType and TypeGuard, both awesome. JAX typing, don't know JAX. Apparently there are some other tools like MonkeyType and PyAnnotate. But if you look at the timing performance, it's...

Pretty good. So it's like significantly faster than some of these tools. Right. So near zero overhead. So you can kind of run it on a complicated app and so on. Okay. This looks great. Yeah. And you can run a particular script. And then what it'll do is it'll output, I believe, a separate file. And it says, look, you just had def barnacle took an X, but no, that X is a colon numpy dot in the array. And this function returns an ND array. Right. Yeah. Yeah.

That's cool. Or if you want to have it annotate bear type, remember bear type will verify that it's actually right at runtime. You can have it do that sort of deal. Or even if you have a partially annotated but not entirely annotated thing, it will annotate that as well. Yeah, so you can specify the output top files, whether or not,

overwrite your files. Obviously, the assumption would be that that is in source control. You've committed it. You run this and override it. Then you look at the diff and you decide. I think that would be the best way to use it, right? That way you can view the diff and go, looks good, accept that change, looks good, accept that change. I don't know about that one. Skip that change. You know, that kind of...

kind of deal. Yeah. Anyway, I think this is pretty awesome and it could be real helpful for people. It's kind of one of those tools you don't use often. It's like Fluent or one of these other upgrade things. It's like, well, I ran it once. I got the old code to the new code. Now I just work new code style. But at the same time, that's a real serious drudgery that you could avoid. Yeah.

Yeah. I got to try it on my code bases. Like I said, I sometimes trip up on fixtures and maybe it'll tell me. I bet it'll tell you. I don't know what to put for fixtures either, but it'll probably discover it. Christian down in the audience points out faster than monkey type smiley. Oh, this is neat. I'm looking forward to playing with that. Cool. Indeed. All right.

It's getting to the end of the year. I'm feeling a little lazy. Are you? No. Tell us more. No, I'm not. But maybe Trey Hunter is. So Trey Hunter wrote a blog post called Lazy Self-Installing Python Scripts with UV. And I think that time is right for us to go back to using our own personal scripts more because it's now so much easier with UV and Python. So I used, I mean, I thought about this. I used to have my own bin, a

a home directory bin directory full of a whole bunch of little scripts. I got a men. I got a tilde men. Come on now. Yeah. Tilde men. So I've got, I actually, to be honest, I haven't done this much lately because it's not,

trivial with Python. And I don't really write a lot of bash anymore or anything. I mean, a little bit, but nothing I keep want to keep around anyway. But that's a there's a lot of everyday Python, everyday tasks that maybe maybe would help to code up with Python. And it's easier now. So Trey walks through starts out with talking about how you can how you do this with just creating a file in

in a bin directory, it has to be in your path. Um, so that's, I don't remember if he talks about that or not, but you have to possibly modify your dot ZHRC or your bash RC or something, um, to get, to get your home directory bin in your path. But after it's there, um, you can stick a file in there and change the permissions on it, the execute bit. Um, and Oh yeah. And then make sure that it's, um, uh, it's a directory in your path variable.

And then you can just run it whenever you want from any directory. The slight difference is the pound bang, I don't know what you call this thing. - Shebang. - Shebang, the shebang at the top. He has an example of just using user bin env Python 3 and that works fine for things without dependencies. So just a little Python script, which is actually still pretty useful.

It's interesting, the example though, he says his script, like my script.py, but then he has an example of bin zero that just prints out 80 zeros, which is kind of cool. But that really wouldn't be zero.py, that would just be zero. So you just take off the .py so you can just type it. So the problem that he wants to talk about in this is with dependencies, and he has an example that uses handouts

he normalizes audio of a given video file with the FFM peg and, and great tool, but yeah, it's something you have to install. So, or it depends, the script depends on the FFM peg normalize and the FFM peg utility. So how do you deal with this? He said he used to be using PIPX, but now UV makes it super easy. You don't have to, you don't, it doesn't even have to be installed to write the script. You use the,

the shebang again. But instead of Python, you call dash S or dash capital S, uv run and dash S script. And then you have these three slashes with script in there and then three slashes at the end, all in comments. But then you can require which Python, so you can say requires Python and dependencies. And it looks like there's a bunch of, I wonder how much of the pyproject.toml syntax goes in here. But this is very...

Tom will like, but you've got your dependencies there and it just runs it. So what? Yeah. And by the way, not only does it install the dependencies when you run it, if they're not there, it will install Python. If Python three 12 is not there. Yeah. And it checks it. Everyone like, like say,

say you haven't run something for a few weeks and there's been it's not the correct versions anymore or somebody's taking something down it'll check it and get the right thing and it happens so fast that you don't have to worry about it if you're connected with a connection but the so I tried this this morning and I was thrilled to see the it says like reading it's the output of your script but then it also says reading inline script metadata from and then it

has the title of the script. And I have a lot of scripts that I pipe the output to stuff. So I was hoping that I wanted, I'm like, what's going to mess up my output? It doesn't. This reading inline stuff comes out on standard error. And can I add one more command flag? Okay. To what Trey is suggesting here. You go back up to the env-uv command. Yeah. With the capital S, just add a dash lettering.

lowercase q and all that goes away it's the same output so what's the dash dash is that just script or something i guess i've never used it i just tell it to run the script so i don't know what the dash test is the dash q will get rid of get rid of that it'll get rid of the the management output of uv yeah because i don't really care about that yeah like you don't want that not in this

I think if you're trying to, this is really nice because it's a super simple way to, as long as somebody has UV, that's all you need to start distributing like utilities to them. But you don't want them necessarily to see the startup info. Actually, so I might, I think I'll probably leave it on because so that I can see that it, it's what it's pulling from and where it's like when it updates things or something, if it has to install something, it'll output that.

But then it doesn't mess up the output. Like I said, it's going to standard error. So if you pipe standard out to something else, it'll still work fine. So anyway, cool to write up like how to use command line utilities now with Python. Yeah. You've got UV tool install for the packages with entry points, all sorts of nice stuff. Yeah. UV everywhere. Yeah.

All right. Those are our items. I've only got one extra that I want to talk about. Do you have any answers? Yeah, go first. I got a couple. Okay. This is pretty quick. I really appreciate... I forget what this is called. So anyway, I've got the complete PyToys course. Of course, I've split it up. People can buy it in payments if they want, but it's like 59 bucks. So on pythontest.com. There's also the new...

discord community is going really great um it's a one-time admission just to help with the costs of everything um and then a really quick hello pi test course anyway i've priced these where i think they're completely reasonable for people however you might not live have a software engineering job and live in oregon um or the u.s so i was really thrilled the other day somebody from india just got out of college uh doesn't have a job yet but is or maybe they have a

starter job, but they're, they looked at this wherever they live. And they said, this is too much for me. Can I get a discount? I don't have like the regional pricing set up. So I really parity, they pricing parity. That's it. So I really appreciate that. So if you can find me on LinkedIn or, or a blue sky or mastered on and just ask or, and, and I'll, I'll work with you. So just, I appreciate people reaching out. That's it.

Excellent. All right. I have a couple here. Let's I'll go through them quick over to blue sky. We've got Hugo VK says, Hey, Python three 14 alpha three is out and it's got the links to the what's new and so on. And reasons I don't understand pictures of very delicious looking cake, which I'm here for, but.

Anyway, people can check that out. That was from a couple of days ago. Yeah, maybe a week, quite a week ago, five days ago. So the testing of Python 3.14 continues. Remember, I believe there's supposed to be seven total releases before it goes to beta and gets kind of locked down-ish. So you got that? It's not cake, it's pie. 3.14, but...

- Oh my gosh. How did I miss it? How did I miss it? All right, one thing that drives me crazy if you're a Mac person is there's almost always a command you can hit for settings that is the same, command comma. Any app you want the settings for, command comma.

unless it's just disrespecting its own self. It has no self-respect. Command comma will bring up whatever settings it has. Web browser, Word editor, whatever. But check for updates all over the map. Some apps automatically check for updates. Some will only tell you there's an update if you check for it. Firefox and Zen browser only do it if you pull the about screen and show it, then it'll tell you. But on Vivaldi, if you pull the about screen, it won't tell you if there's an update. Like it's all, all,

All annoying. So I went through and I added a check for update hotkey. This is kind of a cool trick. I thought people would appreciate it. If you go to Mac OS, you go to settings, you go to keyboard, you go to keyboard shortcuts, then you go to app shortcuts and pick out individual apps and say, I want this menu, whatever the menu text is.

Long as case sensitive spaces, everything is super annoying. You can't edit it. So get it right. Is it a capital four check for updates or a lowercase four check for updates? You got to get that right. But then you can just say control you and then you can go or whatever you want to pick. And then if you just like in any app, if you set up the ones you cared about checking and just...

hit check for updates and it pulls it up. It's kind of nice. I'm just still blown away that I never knew that command comma was the settings thing. Almost every Apple command comma will do what you're looking for. Okay. Yeah. Yeah. But there's no update equivalent. So control you now is from my computer. Okay. So I got Firefox, OBS, VS code, Zen browser, source tree, like source tree is one of those that it'll go months without telling you there's an update. But if you check, there's almost always an update.

All right, on to the next thing. What do we got next? Oh, I just wanted to talk about something really kind of fun and interesting on TalkPython. I got two things on TalkPython real quick here. But this is a fun web, not so much a TalkPython thing, just like a fun web design, thinking about URLs. So check this out, Brian. We can go to any episode here. So Peter Wang, he was on, and Peter Wang is super fun.

If you look at that episode page, you can see there's a thumbnail, like a social media image of that, which is also the YouTube thumbnail, right? Yeah.

And let me see if I can make this wider so you can see it's going to be small. But up here, if I just type .jpg on the end of the URL, I get the thumbnail. And if I just type VTT, which is WebVTT transcripts, I get the transcripts. Oh, cool. Isn't that fun? I would encourage people to think more about like instead of having a bunch of different ways to get things, just think about like resource. I don't know what you call it. It's a little bit rest-ish, but...

I think it's neat. Maybe if I had a JSON representation, I could just put .json on the end and it would represent the data of the podcast as JSON. I don't really know what I would put there. But anyway, I thought I just want to encourage people. You can play that at TalkPython, but encourage people to just think about making cool little URL API interactivity bits that way. Neat. I like it.

Yeah, thanks. All right. Next, I did a mega write-up. You can see that on the TalkPython blog, talkpython.fm slash blog, 16 minutes reading time it suggests for this. I wrote up an in-depth analysis of the top TalkPython episodes, top five, and I

And I even did a little Jupyter notebook action to come up with where are they on the scale and how does that compare against the average number of downloads? Number one is awesome text tricks with NLP and Spacey with Vincent Wormerdum. Number two, this one really surprised me. It was so popular. Being a developer with ADHD with Chris Ferrandini. Awesome episode. I didn't expect to be popular. Version APIs with Stanislav. Pandas and beyond with Wes McKinney. That's not surprising.

And the state of flask and palance with David Lord. So those are the top five, but like just super detailed dive into like what was covered, what was important and stuff. So I did that Sunday. Yeah. Sunday morning. The house was quiet. People were chilling. So I'm going to write. Well with, um, I mean, it's a 16 minute read with everybody with ADHD. I don't think anybody's going to read the whole thing. Yeah.

- Yeah, maybe the people who were served by that podcast were not. You could always listen to the episodes, but it highlights what was covered. - No, I think that's cool. Yeah, neat. - Yeah, thanks. Okay, now we're down to, oh wait, no, one more thing. Since we talked about, I wasn't originally gonna point this out, but since we talked about typing so much, and you talked about teaching typing, I have a four and a half hour course called Rock Solid Python and Type Hints and Tools.

So over at DocPython, I'll put that link in the show notes and people can check that out. This is one of my absolute favorite courses of all of our 50 or so courses. And it's a good one. This type of stuff is really neat.

Neat. Okay. Are you ready for the joke? I am. This one, if you've heard of lol code, some of these like joke languages, this is one of them, but it's a little bit more Python oriented, I guess I'll say. Let me see if I can zoom in for making it a little legible. So we can come down here and there's a table chart. So it's like an alternative language. So if you want to write...

If you want to write Python-like code, but you don't like it, so you've got like return. Instead of writing return, you can say it's given. And if you want to say plus what it says RIS. So this is called Python with RIS or no, that's not exactly, that's its description. Python.

PyGat. And I'm not in this world very much. It kind of goes off a lot of like Twitch stream type of terminology. So you've got print and instead of print, you gap for true, you get Aurora for false. It's cooked. You bop instead of deaf. And then for while loops, it's let him cook. Just let him cook.

So for example, a wild shoe would be let him cook Aurora. Import is glazed. Let's see. If, L, if, else is chat. Is this real? Yo chat. Only in Ohio. Okay. That's funny. Oh, glass is gibbity. I actually get that reference. Break is just put the fries in the bag, bro.

Raise is crash out. And then assert, I love assert. Assert is sus. Yeah. It's pretty sus.

Oh, oh, it's us. I think we should add the language maybe. Yeah, so this is pretty good. Yeah. Okay. Let's see. All right. So now let's look at an example. Okay. So we've got here, we've got here on the left, we've got glaze, numpy, ah, NP lock in random glaze choice and then skippity D Riz, Riz Lee and plus pass, I guess. Anyway, Duke Dennis equals zero says, let him cook Aurora. Just let him cook and chat. Is it real cooked?

crash out error only in ohio just put in the fries bro just put the fries in the bag bro this is good i think it really runs i'm pretty sure

Well, I think that we should have like a conversion that you can take some code and convert it to this. Yeah, yeah. Like a transpiler sort of thing. Just an upgrader. Like a two to three, but a pie to gap. Skibbity Rizzler pluh. Just put the fries in the bag, bro.

That might be my favorite. Or let him cook. Just let him cook. Chat, is this real? This is good. Crash out. Crash out. All right. Well, are you ready to crash out on this episode? I am. Just put them in the fries, bro. Put the fries in the bag, bro.

Indeed. Well, awesome. All right. Well, thanks everybody for, for a wonderful 2024. And we're going to, like we said, we'll have a short thank you episode next week, possibly. And, and then, but we'll see everybody in 2025. Bye y'all.