WEBVTT

00:00:00.001 --> 00:00:03.920
One of the most exciting initiatives in the Python space these days is PyScript,

00:00:03.920 --> 00:00:06.620
which enables Python running natively in your browser.

00:00:06.620 --> 00:00:09.660
With consistent support from the folks at Anaconda,

00:00:09.660 --> 00:00:13.420
this project has been making solid strides since its initial release.

00:00:13.420 --> 00:00:17.060
On this episode, we catch up with Fabio Pliger and Nicolas Tolervé

00:00:17.060 --> 00:00:19.260
to see where they are with the PyScript project.

00:00:19.260 --> 00:00:24.840
This is Talk Python To Me, episode 426, recorded June 22, 2023.

00:00:24.840 --> 00:00:40.980
Welcome to Talk Python To Me, a weekly podcast on Python.

00:00:40.980 --> 00:00:42.720
This is your host, Michael Kennedy.

00:00:42.720 --> 00:00:45.380
Follow me on Mastodon, where I'm @mkennedy,

00:00:45.380 --> 00:00:50.200
and follow the podcast using @talkpython, both on fosstodon.org.

00:00:50.200 --> 00:00:52.800
Be careful with impersonating accounts on other instances.

00:00:52.800 --> 00:00:53.780
There are many.

00:00:54.340 --> 00:00:58.840
Keep up with the show and listen to over seven years of past episodes at talkpython.fm.

00:00:58.840 --> 00:01:02.880
We've started streaming most of our episodes live on YouTube.

00:01:02.880 --> 00:01:06.600
Subscribe to our YouTube channel over at talkpython.fm/youtube

00:01:06.600 --> 00:01:10.400
to get notified about upcoming shows and be part of that episode.

00:01:10.400 --> 00:01:14.340
This episode is brought to you by JetBrains,

00:01:14.340 --> 00:01:17.620
who encourage you to get work done with PyCharm.

00:01:17.620 --> 00:01:21.860
Download your free trial of PyCharm Professional at talkpython.fm

00:01:21.860 --> 00:01:24.520
slash done dash with dash PyCharm.

00:01:24.520 --> 00:01:27.020
And it's brought to you by Sentry.

00:01:27.020 --> 00:01:29.280
Don't let those errors go unnoticed.

00:01:29.280 --> 00:01:30.280
Use Sentry.

00:01:30.280 --> 00:01:33.120
Get started at talkpython.fm/sentry.

00:01:33.120 --> 00:01:36.000
Nicholas, Fabio, welcome to Talk Python To Me.

00:01:36.000 --> 00:01:36.460
Hi.

00:01:36.460 --> 00:01:37.240
How are you, Michael?

00:01:37.240 --> 00:01:37.800
Doing well.

00:01:37.800 --> 00:01:39.440
I think I should say welcome back.

00:01:39.740 --> 00:01:43.400
You know, I've been on the show a couple of times for various things.

00:01:43.400 --> 00:01:49.220
Most recently, other than this, also about PyScript and MicroPython,

00:01:49.220 --> 00:01:52.360
which we'll touch a little bit on as well.

00:01:52.360 --> 00:01:54.420
But yeah, excited to have you both here.

00:01:54.420 --> 00:01:56.780
Excited, as always, to be talking about PyScript.

00:01:56.780 --> 00:01:58.920
One day I can just, I feel it.

00:01:58.920 --> 00:01:59.980
We're going to be living the dream.

00:01:59.980 --> 00:02:01.420
Python in the browser.

00:02:02.300 --> 00:02:03.480
It's going to be fantastic.

00:02:03.480 --> 00:02:04.060
Let's do it.

00:02:04.060 --> 00:02:04.460
I hope so.

00:02:04.460 --> 00:02:05.360
Let's hope.

00:02:05.360 --> 00:02:05.840
Yes.

00:02:05.840 --> 00:02:07.380
I mean, is the dream real now?

00:02:07.380 --> 00:02:09.000
That's kind of part of the question.

00:02:09.000 --> 00:02:11.720
And we'll see how it's to some degree real.

00:02:11.720 --> 00:02:13.660
And you all are making great progress on that.

00:02:13.660 --> 00:02:14.800
I'm going to spoil it.

00:02:14.800 --> 00:02:15.660
That's the thing.

00:02:17.660 --> 00:02:17.920
Yeah.

00:02:17.920 --> 00:02:21.520
And like, Nicholas and I are laughing for a reason too,

00:02:21.520 --> 00:02:24.040
which we can't wait to, you know, talk about it.

00:02:24.040 --> 00:02:25.340
So that's going to be good.

00:02:25.340 --> 00:02:26.760
We can't wait to hear about it.

00:02:26.760 --> 00:02:28.700
But before we do, you know, like I said,

00:02:28.700 --> 00:02:31.600
you both have been on the show for a couple of reasons,

00:02:31.600 --> 00:02:33.160
a couple of episodes previously.

00:02:33.160 --> 00:02:36.560
But quick introductions for folks that don't necessarily know you.

00:02:36.560 --> 00:02:37.200
You want to start, Nicholas?

00:02:37.200 --> 00:02:38.520
Okay, I'll go first.

00:02:38.520 --> 00:02:39.160
I'm Nicholas.

00:02:39.160 --> 00:02:43.540
I'm a principal engineer on the PyScript team at Anaconda.

00:02:43.540 --> 00:02:48.060
And my passion is Python education,

00:02:48.060 --> 00:02:52.360
which is one of the other reasons why I was on the show earlier.

00:02:52.360 --> 00:02:54.940
And I've also been involved in all sorts of different aspects

00:02:54.940 --> 00:02:56.740
of the Python community as well.

00:02:56.740 --> 00:03:00.920
And other interesting things like, oh, have I got one?

00:03:00.920 --> 00:03:01.900
I think I have.

00:03:01.900 --> 00:03:07.100
BBC Micro:bit was something that I was involved in and stuff like that.

00:03:07.100 --> 00:03:08.440
So, yep, that's me.

00:03:08.440 --> 00:03:10.480
But right now I'm doing PyScript.

00:03:10.480 --> 00:03:13.360
And I am joined by my esteemed colleague, Fabio.

00:03:13.360 --> 00:03:14.880
Thank you, Nicholas.

00:03:14.880 --> 00:03:19.980
Well, as you can tell, I work with Nicholas at Anaconda, creator of PyScript.

00:03:19.980 --> 00:03:23.360
Been in the community for a long time as well.

00:03:23.360 --> 00:03:24.180
Probably not.

00:03:24.180 --> 00:03:26.420
Let's not focus on numbers or years.

00:03:26.420 --> 00:03:32.100
So I'm very interested in, just like Nicholas, Python for education as well.

00:03:32.100 --> 00:03:37.780
And the whole community aspect of it, which is mostly why I am here, I would say.

00:03:38.000 --> 00:03:41.520
So I've been involved in a lot of community things.

00:03:41.520 --> 00:03:45.620
I was chairman of EuroPython for, I think, five, six years.

00:03:45.620 --> 00:03:51.020
Then chair of Python Italy, co-founder of Python Italia, et cetera.

00:03:51.020 --> 00:03:54.740
Always loved the community aspect of Python.

00:03:54.900 --> 00:03:55.900
And happy to be here.

00:03:55.900 --> 00:03:57.000
Thank you for having us.

00:03:57.000 --> 00:03:58.520
Yeah, it's great to have you as always.

00:03:58.520 --> 00:04:03.520
You both mentioned having an interest or background or both in education.

00:04:03.520 --> 00:04:09.720
And Nicholas, I think probably the high watermark is probably the BBC micro:bit, which touched,

00:04:09.720 --> 00:04:16.020
you know, the lives of more students than, you know, almost any other regular school teacher

00:04:16.020 --> 00:04:18.860
by a massive, massive margin, millions of kids.

00:04:18.860 --> 00:04:19.360
That's amazing.

00:04:19.360 --> 00:04:23.820
But I think another angle here, teaching people to work with Python and getting them started in

00:04:23.820 --> 00:04:28.980
programming from going from I have this idea or I've learned what I got to do in programming

00:04:28.980 --> 00:04:33.480
until I can make it happen on a machine that is not set up for programming necessarily.

00:04:33.480 --> 00:04:35.700
That gap is pretty far with Python.

00:04:35.700 --> 00:04:37.580
And it's pretty far with most languages, right?

00:04:37.580 --> 00:04:41.520
Like you want to do Ruby, probably got to set up some kind of Ruby thing.

00:04:41.520 --> 00:04:43.980
You want to do Java, a bunch of stuff there, right?

00:04:44.220 --> 00:04:50.000
But being able to do it in your browser or something, you just open a page and run it

00:04:50.000 --> 00:04:52.780
like there's this educational empowering aspect to it.

00:04:52.780 --> 00:04:53.780
Absolutely.

00:04:53.780 --> 00:05:01.280
And you wouldn't believe the interesting situations that teachers have to work in at school and,

00:05:01.280 --> 00:05:05.280
you know, locked down computers and things like that where their sys admins won't install

00:05:05.280 --> 00:05:11.840
Python or any other kind of programming language, despite here in the UK and all over the US programming

00:05:11.840 --> 00:05:14.900
being part of the curriculum and it's mandated in the national curriculum here.

00:05:14.900 --> 00:05:20.240
And I was in a call yesterday with someone who just told me that the Norwegians have now got programming

00:05:20.240 --> 00:05:22.100
mandatory in their national curriculum.

00:05:22.100 --> 00:05:24.900
And nobody seems to have told the school admins this.

00:05:24.900 --> 00:05:29.120
So what's the piece of software that was running on everybody's computer in the school?

00:05:29.120 --> 00:05:30.320
It's a browser.

00:05:30.320 --> 00:05:32.880
So I see where this conversation is going.

00:05:32.880 --> 00:05:36.720
Wouldn't it be great if you had Python that ran in the browser?

00:05:36.720 --> 00:05:39.840
It would solve all your installation problems if you're an educator.

00:05:39.840 --> 00:05:40.320
Yeah.

00:05:40.320 --> 00:05:46.800
I mean, how much of JavaScript's rise to fame and continued, not quite dominance, but almost certainly

00:05:46.800 --> 00:05:50.720
in the front inside dominance has to do just with the fact that it's possible.

00:05:50.880 --> 00:05:51.880
Yes.

00:05:51.880 --> 00:05:52.880
Yes.

00:05:52.880 --> 00:05:53.880
Totally.

00:05:53.880 --> 00:05:54.880
It's not necessarily the best.

00:05:54.880 --> 00:05:58.000
It's not necessarily what people want, at least not in the early days, but it's possible.

00:05:58.000 --> 00:05:59.940
And, and that's, it's a lot of things.

00:05:59.940 --> 00:06:04.940
I think, you know, JavaScript has lots of really wonderful aspects to it.

00:06:04.940 --> 00:06:10.060
I've been using JavaScript for almost 20 years, but it's certainly not a beginner friendly

00:06:10.060 --> 00:06:10.940
language.

00:06:10.940 --> 00:06:13.660
I think you could say that with some confidence.

00:06:13.660 --> 00:06:19.980
You could try teaching it to beginners, but with all the coercion rules and gotchas that

00:06:19.980 --> 00:06:24.940
make sense if you understand JavaScript, but it's quite a journey to get you to that understanding.

00:06:24.940 --> 00:06:29.660
With all of that, it's hard enough just to sort of concentrate on getting Hello World working

00:06:29.660 --> 00:06:30.620
and things like that.

00:06:30.620 --> 00:06:36.620
Just a simple proof of concept to show that your development environment is working.

00:06:36.620 --> 00:06:41.740
But if a language that you're using is the equivalent of trying to teach a five year old

00:06:41.740 --> 00:06:45.740
beginner violinist with a Stradivarius, they're not going to kind of get it.

00:06:45.740 --> 00:06:46.740
Okay.

00:06:46.740 --> 00:06:47.740
Yeah.

00:06:47.740 --> 00:06:52.940
You give them an instrument that helps them take the first steps into programming and Python

00:06:52.940 --> 00:06:54.300
as a programming language.

00:06:54.300 --> 00:06:58.380
And this is at the core of Yido's mission at the very beginning.

00:06:58.380 --> 00:07:01.500
A, B, C, the language that he based it off was a teaching language.

00:07:01.500 --> 00:07:08.300
So education and learning and teaching and making sure that Python is teachable is a part of the DNA,

00:07:08.300 --> 00:07:09.500
which is a one.

00:07:09.500 --> 00:07:09.500
It is.

00:07:09.500 --> 00:07:11.500
It's been around since 1989, I guess.

00:07:11.500 --> 00:07:11.500
Yeah.

00:07:11.500 --> 00:07:12.620
You put it that way, hasn't it?

00:07:12.620 --> 00:07:12.620
Yeah.

00:07:12.620 --> 00:07:18.140
That is the striking difference, honestly, between Python and almost all languages today.

00:07:18.140 --> 00:07:18.460
Right?

00:07:18.460 --> 00:07:23.980
Like why basic was super popular, why JavaScript is super popular, etc.

00:07:23.980 --> 00:07:25.420
Because it's your only option.

00:07:25.420 --> 00:07:25.420
Right?

00:07:25.420 --> 00:07:26.460
And it's the thing.

00:07:26.460 --> 00:07:31.180
Or if not, it's the thing that you have right away there already installed for you.

00:07:31.180 --> 00:07:35.580
And you don't have to go through the pain of trying to download things, install on your system,

00:07:35.580 --> 00:07:36.300
and whatnot.

00:07:36.300 --> 00:07:39.420
Python, on the contrary, it's very interesting.

00:07:39.420 --> 00:07:45.420
It's the most popular language, but it's because people in specific domain areas chose Python

00:07:45.420 --> 00:07:50.540
because it was the easiest and the most expressive and tailored for education.

00:07:50.540 --> 00:07:56.780
And then it started competing with very specific languages that were born to do specific things.

00:07:56.780 --> 00:07:59.100
Like, you know, R is another example.

00:07:59.100 --> 00:08:02.060
Like, R was born with that goal.

00:08:02.060 --> 00:08:04.220
And that's why it's so good at it.

00:08:04.220 --> 00:08:07.180
Python just happens to be very easy to understand.

00:08:07.180 --> 00:08:11.180
So data scientists and people adopt it, which is great.

00:08:11.180 --> 00:08:15.260
Python actually, just to close, Python actually is the most popular language,

00:08:15.260 --> 00:08:20.860
but it has a horrible story for mobile and browser and tablets.

00:08:20.860 --> 00:08:24.380
The most popular hardware and software on earth.

00:08:24.380 --> 00:08:24.780
Right?

00:08:24.780 --> 00:08:27.580
And it's still the most popular, which is mind blowing.

00:08:27.580 --> 00:08:28.140
Yeah.

00:08:28.140 --> 00:08:28.620
Yeah.

00:08:28.620 --> 00:08:30.540
So what it would be if it were good on both, right?

00:08:30.540 --> 00:08:31.660
Yeah, quite.

00:08:31.660 --> 00:08:40.300
But what you say, Fabio, it reminds me of a keynote, maybe the pre-COVID keynote at PyCon US,

00:08:40.300 --> 00:08:42.220
where I think one of the keynotes said,

00:08:42.220 --> 00:08:45.500
Python is the world's best second best language.

00:08:45.500 --> 00:08:48.140
And I think that's kind of the essence of what you've just said.

00:08:48.140 --> 00:08:53.020
R is great for doing stats and maths and things, but so is Python.

00:08:53.020 --> 00:08:59.820
Might not be up there with R for very specialist niche mathematical things, but Python's good enough.

00:08:59.820 --> 00:09:03.100
And because it's easy to learn, folks are going to go fly with that.

00:09:03.100 --> 00:09:03.420
Yeah.

00:09:03.420 --> 00:09:09.740
I think building on what you said, Fabio, I think one of the really unique aspects of Python,

00:09:09.740 --> 00:09:14.860
Python, you know, compare this to like visual basic or the super simple programming languages

00:09:14.860 --> 00:09:19.020
like scratch or the super high end ones like C++ and Rust.

00:09:19.020 --> 00:09:21.580
Python is a full spectrum language.

00:09:21.580 --> 00:09:25.580
Like you can start really easy with a super partial understanding.

00:09:25.580 --> 00:09:30.380
You don't even know what classes are, but you can put six lines together and you can do cool stuff.

00:09:30.380 --> 00:09:32.780
That's like scratch and basic and stuff.

00:09:32.780 --> 00:09:38.700
But those languages run out of real programming ideas really soon where you just keep growing into Python

00:09:38.700 --> 00:09:40.780
until you get to the C++ and Rust style.

00:09:40.780 --> 00:09:46.940
Conversely, if you want to start with C++ or Rust, like you don't want to teach a beginning what avoid star star is.

00:09:46.940 --> 00:09:51.020
You know, like that's down the road, but like you're hit with that kind of stuff soon.

00:09:51.020 --> 00:09:54.140
So I think that that's a little bit of its magic as well.

00:09:54.140 --> 00:10:09.660
And what you all are doing to bring that magic to front end of the web world and kind of through the transitive property a little bit through progressive web apps to things that run in really good ways on mobile and tablet as well.

00:10:09.660 --> 00:10:12.780
There's it really unlocks a lot and I'm super excited for it.

00:10:12.780 --> 00:10:19.820
So I know I've had you on before to talk about this, but I'm sure there's some folks out there like this sounds amazing.

00:10:19.820 --> 00:10:27.020
What is this angle bracket Python, Python, Python script in my HTML?

00:10:27.020 --> 00:10:28.460
What is this PyScript stuff?

00:10:28.460 --> 00:10:29.660
Tell us about it.

00:10:29.660 --> 00:10:29.900
Cool.

00:10:29.900 --> 00:10:32.300
Let me give you one minute.

00:10:32.300 --> 00:10:39.580
So basically PyScript is a platform that allows users to create applications or forms.

00:10:39.580 --> 00:10:43.580
frameworks on top of it and supports Python as a language.

00:10:43.580 --> 00:10:49.340
And it basically uses the browser as technology as its vector.

00:10:49.340 --> 00:10:49.740
Right.

00:10:49.740 --> 00:10:52.700
It treats the browser as almost like a virtual machine.

00:10:52.700 --> 00:10:53.980
It can move around.

00:10:53.980 --> 00:11:09.500
And then because of the current stack around WASM WebAssembly on the browser technology, we are now able to run pipeline inside, you know, either WASI or MScripten, which are just implementations of WebAssembly on the browser.

00:11:09.500 --> 00:11:13.340
And PyScript sits on top of interpreters.

00:11:13.340 --> 00:11:21.660
We have the browser WebAssembly and then a Python implementation, Pyodide or MicroPython or other things like this.

00:11:21.660 --> 00:11:33.820
And PyScript goes on top by providing a friendly interface, higher level APIs that are, you know, Pythonic and friendly, allows extensibility with plugins and things like this to create an ecosystem.

00:11:33.820 --> 00:11:37.980
And basically what we want to do is reuse the ecosystem.

00:11:37.980 --> 00:11:41.820
As much as we can, we don't want to reinvent anything.

00:11:41.820 --> 00:11:53.980
So actually, that's one of the things that I'm most proud of it during this first year, which is I think we've made really good progress in helping other projects that are, you know, developing and making Python happen on the browser.

00:11:53.980 --> 00:12:05.980
Wrong story short, PyScript allows you through those tags, PyScript or PyConfig or PyRaple to define, you know, what's my environment, what packages I want to install and whatnot.

00:12:05.980 --> 00:12:12.980
And then with the PyScript script, you can define scripts that run your application and then just use it.

00:12:12.980 --> 00:12:15.980
You don't need to install anything to download anything.

00:12:15.980 --> 00:12:16.980
It just works on the browser.

00:12:16.980 --> 00:12:17.980
Yeah, excellent.

00:12:17.980 --> 00:12:23.980
I think maybe let me just give one more piece, one more resource for folks out there who might be interested.

00:12:23.980 --> 00:12:26.980
Have you all seen the birth and death of the office script by Gabriel?

00:12:26.980 --> 00:12:27.980
Yeah.

00:12:27.980 --> 00:12:28.980
Do you see that?

00:12:28.980 --> 00:12:29.980
I was there when you gave it.

00:12:29.980 --> 00:12:30.980
Oh, my gosh.

00:12:30.980 --> 00:12:31.980
Amazing.

00:12:31.980 --> 00:12:32.980
What was the crowd's reaction like?

00:12:32.980 --> 00:12:34.980
Oh, we were just rolling around.

00:12:34.980 --> 00:12:35.980
It laughed.

00:12:35.980 --> 00:12:36.980
Yeah, it was great.

00:12:36.980 --> 00:12:37.980
It's great delivery.

00:12:37.980 --> 00:12:38.980
Yeah.

00:12:38.980 --> 00:12:44.980
So this is a, let's see, 15 minutes, you know, 30 minute presentation he gave at PyCon 2014.

00:12:44.980 --> 00:12:49.980
So quite, quite outdated in like web technology evolution speed.

00:12:49.980 --> 00:13:01.980
But I throw this out there because it's both an amazing comedy skit, but also super nice buildup of how you got to places like now within script in and WebAssembly.

00:13:01.980 --> 00:13:06.980
And how do you take C code like CPython and run it on top of the browser on the front end?

00:13:06.980 --> 00:13:07.980
So people are interested.

00:13:07.980 --> 00:13:10.980
They can, you know, they are like, what is all this magic?

00:13:10.980 --> 00:13:13.980
You can have both a really good laugh and watch that.

00:13:13.980 --> 00:13:14.980
That was good.

00:13:14.980 --> 00:13:24.980
So with PyScript, you can write just like in JavaScript, you can write JavaScript or in this case, Python in the browser, right?

00:13:24.980 --> 00:13:29.980
Like you could just like you could say angle bracket JavaScript and just start writing JavaScript code.

00:13:29.980 --> 00:13:31.980
Here you can say py dash script.

00:13:31.980 --> 00:13:35.980
You can say print, you know, hello from Python or whatever.

00:13:35.980 --> 00:13:36.980
And it'll run.

00:13:36.980 --> 00:13:39.980
But you can also have more well structured applications, right?

00:13:39.980 --> 00:13:40.980
Yes.

00:13:40.980 --> 00:13:44.980
I think I might even lean so far saying you should have more well structured applications.

00:13:44.980 --> 00:13:45.980
Yeah.

00:13:45.980 --> 00:13:45.980
What do you all think?

00:13:45.980 --> 00:13:54.980
One thing about PyScript and that we are actually trying to work a lot on it about it is that it gives a lot of freedom, as you said, right?

00:13:54.980 --> 00:13:55.980
You can put tags in there.

00:13:55.980 --> 00:13:57.980
It's just HTML.

00:13:57.980 --> 00:14:04.980
So everything you have access to in an HTML page, you should have access to with PyScript as well.

00:14:04.980 --> 00:14:16.980
So like your tags in the page, your scripts, if you loaded anything in your JavaScript, you know, scope, you can import those things in PyScript and say from JavaScript import this and then just run.

00:14:16.980 --> 00:14:22.980
Actually, one of the things that we're working right now is actually going to explode that even more.

00:14:22.980 --> 00:14:24.980
And we're going to demo later.

00:14:24.980 --> 00:14:38.980
We have currently a next branch where we are redesigning the core of PyScript and making it smaller, fully web based, you know, fixing most of the bugs and the very crappy code that I wrote at the beginning.

00:14:38.980 --> 00:14:39.980
Right.

00:14:39.980 --> 00:14:47.980
And we had an amazing addition to the team from Andrea, who's been in tech tech and on the web for a lifetime.

00:14:47.980 --> 00:14:48.980
And he he's amazing.

00:14:48.980 --> 00:14:51.980
And he's bringing that aspect that we lacked and the team.

00:14:51.980 --> 00:14:53.980
Well, you know, we have native point of view.

00:14:53.980 --> 00:14:54.980
We will.

00:14:54.980 --> 00:14:56.980
Well, Python is and Python geeks.

00:14:56.980 --> 00:14:57.980
So we missed that.

00:14:57.980 --> 00:15:04.980
This portion of talk Python to me is brought to you by JetBrains and PyCharm.

00:15:04.980 --> 00:15:09.980
Are you a data scientist or a web developer looking to take your projects to the next level?

00:15:09.980 --> 00:15:11.980
Well, I have the perfect tool for you.

00:15:11.980 --> 00:15:12.980
PyCharm.

00:15:12.980 --> 00:15:20.980
PyCharm is a powerful integrated development environment that empowers developers and data scientists like us to write clean and efficient code with ease.

00:15:20.980 --> 00:15:25.980
Whether you're analyzing complex data sets or building dynamic web applications.

00:15:25.980 --> 00:15:30.980
PyCharm has got you covered with its intuitive interface and robust features.

00:15:30.980 --> 00:15:34.980
You can boost your productivity and bring your ideas to life faster than ever before.

00:15:34.980 --> 00:15:40.980
For data scientists, PyCharm offers seamless integration with popular libraries like NumPy, Pandas and Matplotlib.

00:15:40.980 --> 00:15:47.980
You can explore, visualize and manipulate data effortlessly, unlocking valuable insights with just a few lines of code.

00:15:47.980 --> 00:15:52.980
And for us web developers, PyCharm provides a rich set of tools to streamline your workflow.

00:15:52.980 --> 00:16:01.980
From intelligent code completion to advanced debugging capabilities, PyCharm helps you write clean, scalable code that powers stunning web applications.

00:16:01.980 --> 00:16:09.980
Plus, PyCharm's support for popular frameworks like Django, FastAPI and React make it a breeze to build and deploy your web projects.

00:16:09.980 --> 00:16:14.980
It's time to say goodbye to tedious configuration and hello to rapid development.

00:16:14.980 --> 00:16:16.980
But wait, there's more!

00:16:16.980 --> 00:16:24.980
With PyCharm, you get even more advanced features like remote development, database integration, and version control, ensuring your projects stay organized and secure.

00:16:24.980 --> 00:16:30.980
So whether you're diving into data science or shaping the future of the web, PyCharm is your go-to tool.

00:16:30.980 --> 00:16:32.980
Join me and try PyCharm today.

00:16:32.980 --> 00:16:43.980
Just visit talkpython.fm/done-with-pycharm, links in your show notes, and experience the power of PyCharm firsthand for three months free.

00:16:43.980 --> 00:16:46.980
PyCharm, it's how I get work done.

00:16:46.980 --> 00:16:47.980
I think it's a really good idea.

00:16:47.980 --> 00:16:48.980
I think it's a really good idea.

00:16:48.980 --> 00:16:49.980
I think it's a really good idea.

00:16:49.980 --> 00:16:50.980
I think it's a really good idea.

00:16:50.980 --> 00:16:51.980
I think it's a really good idea.

00:16:51.980 --> 00:16:52.980
I think it's a really good idea.

00:16:52.980 --> 00:16:53.980
I think it's a really good idea.

00:16:53.980 --> 00:16:54.980
I think it's a really good idea.

00:16:54.980 --> 00:16:55.980
I think it's a really good idea.

00:16:55.980 --> 00:16:56.980
I think it's a really good idea.

00:16:56.980 --> 00:16:57.980
I think it's a really good idea.

00:16:57.980 --> 00:16:58.980
I think it's a really good idea.

00:16:58.980 --> 00:16:59.980
I think it's a really good idea.

00:16:59.980 --> 00:17:00.980
I think it's a really good idea.

00:17:00.980 --> 00:17:01.980
I think it's a really good idea.

00:17:01.980 --> 00:17:02.980
I think it's a really good idea.

00:17:02.980 --> 00:17:03.980
I think it's a really good idea.

00:17:03.980 --> 00:17:04.980
I think it's a really good idea.

00:17:04.980 --> 00:17:05.980
I think it's a really good idea.

00:17:05.980 --> 00:17:06.980
I think it's a really good idea.

00:17:06.980 --> 00:17:10.980
to almost do anything with any language and deploy anywhere.

00:17:10.980 --> 00:17:11.980
Right?

00:17:11.980 --> 00:17:13.980
It's beyond Python.

00:17:13.980 --> 00:17:17.980
Even if Python is the primary citizen there,

00:17:17.980 --> 00:17:20.980
we want to make sure that we are locking everything

00:17:20.980 --> 00:17:22.980
for all the users.

00:17:22.980 --> 00:17:23.980
Which is hard.

00:17:23.980 --> 00:17:24.980
Yeah, I'm sure it is.

00:17:24.980 --> 00:17:29.980
Do you see an analogy with Jupyter going from IPython notebooks

00:17:29.980 --> 00:17:33.980
to Jupyter notebooks and starting to bring on a broader view

00:17:33.980 --> 00:17:36.980
of the ecosystem, but still kind of being Python at heart?

00:17:36.980 --> 00:17:39.980
Yeah, I think so in a different way than Jupyter.

00:17:39.980 --> 00:17:44.980
Jupyter has always been very self-contained into the notebook itself

00:17:44.980 --> 00:17:49.980
and the programming paradigm that the notebook brings with it.

00:17:49.980 --> 00:17:54.980
You know, it's very, it's an exploration tool rather than editor authoring

00:17:54.980 --> 00:17:55.980
to it.

00:17:55.980 --> 00:17:58.980
And then with JupyterLab, it evolved in different things as well.

00:17:58.980 --> 00:18:01.980
I think PyScript has maybe the opposite problem.

00:18:01.980 --> 00:18:06.980
We're too open, which is hard for actually our,

00:18:06.980 --> 00:18:10.980
user base that we want to, we set PyScript as for the 99%.

00:18:10.980 --> 00:18:12.980
We need to do a lot of hard work to make it happen.

00:18:12.980 --> 00:18:13.980
Nicholas.

00:18:13.980 --> 00:18:16.980
Well, this is a really great point that Fabio is making.

00:18:16.980 --> 00:18:20.980
And you've got to remember the keyword here is that PyScript is a platform.

00:18:20.980 --> 00:18:21.980
Now it's a platform.

00:18:21.980 --> 00:18:25.980
You know, the layers of that platform were articulated by Fabio.

00:18:25.980 --> 00:18:29.980
You know, at the bottom is WebAssembly, which runs in your browser and you can compile,

00:18:29.980 --> 00:18:35.980
you know, mscripten or other things can sort of work on top of that and blah, blah, blah, blah, blah.

00:18:35.980 --> 00:18:36.980
And then you get PyScript.

00:18:36.980 --> 00:18:37.980
Okay.

00:18:37.980 --> 00:18:43.980
So with PyScript, we hope, and we're doing this ourselves to build frameworks on top of that.

00:18:43.980 --> 00:18:45.980
So what's the difference between a framework and a platform?

00:18:45.980 --> 00:18:50.980
If the platform is like the foundational stuff that gives you the core verbs and nouns and things.

00:18:50.980 --> 00:18:51.980
Okay.

00:18:51.980 --> 00:18:55.980
The framework is perhaps focused on a particular problem that you're trying to solve.

00:18:55.980 --> 00:19:00.980
Like in the classic Python world, you know, Django and Flask are web frameworks.

00:19:00.980 --> 00:19:01.980
Okay.

00:19:01.980 --> 00:19:06.980
You have a, you know, matplotlib is a kind of like a framework for creating graphs and things like that.

00:19:06.980 --> 00:19:17.980
And so we expect people to reuse some of these things, because this is another aspect of having Python in the browser is that you also bring the whole of the Python ecosystem into the browser as well.

00:19:17.980 --> 00:19:22.980
And then all the modules and the things like that, that Python brings.

00:19:22.980 --> 00:19:32.980
So we hope, and we're, we're building this sort of stuff and we'll probably come onto that later in this conversation, but we hope the community, because this is an open source project as well.

00:19:32.980 --> 00:19:40.980
Let's not forget the community come along and they start building cool things on top of, of PyScript frameworks and applications and things.

00:19:40.980 --> 00:19:44.980
So, so that they surprise us and delight us and make us go.

00:19:44.980 --> 00:19:50.980
And this is one of the ways that I would measure our success is that if somebody turns up and goes, I built this thing.

00:19:50.980 --> 00:19:54.980
And I go, oh man, I never thought anyone would do that with PyScript.

00:19:54.980 --> 00:19:55.980
Yeah.

00:19:55.980 --> 00:19:58.980
When we get to that, then I know we're rocking.

00:19:58.980 --> 00:19:59.980
Yeah.

00:19:59.980 --> 00:20:01.980
You've queued up a nice comment from the audience here.

00:20:01.980 --> 00:20:04.980
Sarah says I'm exploring Vue JS.

00:20:04.980 --> 00:20:06.980
Shall I wait and use PyScript in my app?

00:20:06.980 --> 00:20:07.980
Great question.

00:20:07.980 --> 00:20:15.980
I think we're coming close to a world where the two play well together, actually very well together.

00:20:15.980 --> 00:20:22.980
So like we'll talk about later, later about PyScript.com, which is an additional thing on top of PyScript.

00:20:22.980 --> 00:20:24.980
And we're using Vue there too, right?

00:20:24.980 --> 00:20:29.980
Like Vue is a great tool for building, you know, front end apps and whatnot.

00:20:29.980 --> 00:20:35.980
But I hope, yeah, I hope in the future we will have Vue written in Python or something similar, which is more Pythonic.

00:20:35.980 --> 00:20:43.980
So I say here's the thing for Sarah to understand is that because Python's in the browser, it has access to the JavaScript context.

00:20:43.980 --> 00:20:46.980
So you could start to mix and match.

00:20:46.980 --> 00:20:52.980
You know, you've got Vue stuff happening in JavaScript and you've got Python stuff that could be working in concert with it as well.

00:20:52.980 --> 00:20:54.980
You know, mix it up a bit.

00:20:54.980 --> 00:20:55.980
I don't know.

00:20:55.980 --> 00:20:56.980
This is an early part of the journey.

00:20:56.980 --> 00:21:01.980
Sarah, you go away and check this out and tell us what you find, you know, knock yourself out.

00:21:01.980 --> 00:21:02.980
Yeah.

00:21:02.980 --> 00:21:03.980
Yeah, absolutely.

00:21:03.980 --> 00:21:04.980
I'll keep repeating this.

00:21:04.980 --> 00:21:09.980
Anyone that has questions or specific use cases or want to contribute, reach out.

00:21:09.980 --> 00:21:13.980
We want to hear from you and we are very welcoming.

00:21:13.980 --> 00:21:14.980
And so come be a contributor.

00:21:14.980 --> 00:21:15.980
Super.

00:21:15.980 --> 00:21:16.980
Yeah.

00:21:16.980 --> 00:21:18.980
And just, you know, shout out to Anaconda, Anaconda Inc.

00:21:18.980 --> 00:21:25.980
for making this possible for you all to be working on this in a more dedicated way instead of just really passionate.

00:21:25.980 --> 00:21:26.980
I've got an hour a day I can spend on it.

00:21:26.980 --> 00:21:33.980
But like legitimately, you can be more responsive and put yourself a little more out there because it's not like it.

00:21:33.980 --> 00:21:36.980
It takes away from that one hour you could add features with.

00:21:36.980 --> 00:21:37.980
I agree.

00:21:37.980 --> 00:21:38.980
Yeah.

00:21:38.980 --> 00:21:42.980
I would say like we're very lucky and very thankful to Anaconda to support this.

00:21:42.980 --> 00:21:43.980
It's a huge effort.

00:21:43.980 --> 00:21:44.980
So, yeah.

00:21:44.980 --> 00:21:49.980
I would add one more possibility out there for folks in Sarah's situation.

00:21:49.980 --> 00:21:54.980
I would love to see PyView or something like really ready to work with it.

00:21:54.980 --> 00:22:02.980
I know the MicroPython work I'm about to ask you, just about to ask you all about for a follow up on, makes that really a possible case.

00:22:02.980 --> 00:22:07.980
But if you're really just like, it's got to be some JavaScript framework, give HTMLX a look.

00:22:07.980 --> 00:22:12.980
It's really, really nice that you can just keep writing Python.

00:22:12.980 --> 00:22:14.980
You got to do on the server and it's kind of a little async type of thing.

00:22:14.980 --> 00:22:17.980
But that's how a lot of the view stuff happens anyway.

00:22:17.980 --> 00:22:25.980
So if PyScript weren't the answer, maybe consider HTMLX before you decide like it's all front end and React and just a bunch of APIs.

00:22:25.980 --> 00:22:26.980
That's really nice stuff.

00:22:26.980 --> 00:22:26.980
All right.

00:22:26.980 --> 00:22:27.980
Back to PyScript.

00:22:27.980 --> 00:22:30.980
What's the story of the MicroPython thing that we spoke about last time?

00:22:30.980 --> 00:22:31.980
Okay.

00:22:31.980 --> 00:22:33.980
So let's just recap.

00:22:33.980 --> 00:22:41.980
What happened last time was I think I just finished doing the proof of concepts and we had MicroPython kind of running.

00:22:41.980 --> 00:22:42.980
Okay.

00:22:42.980 --> 00:22:45.980
And that was, that was late last year, wasn't it?

00:22:45.980 --> 00:22:46.980
Yeah, it was like six months ago or so.

00:22:46.980 --> 00:22:47.980
Yeah.

00:22:47.980 --> 00:22:48.980
Just about.

00:22:48.980 --> 00:22:49.980
Yeah.

00:22:49.980 --> 00:22:50.980
Yeah.

00:22:50.980 --> 00:22:51.980
Yeah.

00:22:51.980 --> 00:22:52.980
If you can get, yeah.

00:22:52.980 --> 00:22:53.980
Cause we had Brett on the call as well.

00:22:53.980 --> 00:22:54.980
I remember now.

00:22:54.980 --> 00:22:58.980
If you can get MicroPython running by the middle of next year, it's going to be a kind of hallelujah moment.

00:22:58.980 --> 00:23:02.980
You know, the crowds will part, the angels will sing and the sun will shine and all of this sort of stuff.

00:23:02.980 --> 00:23:03.980
Yeah.

00:23:03.980 --> 00:23:04.980
Cats and dogs living together, all that.

00:23:04.980 --> 00:23:05.980
Yeah, exactly.

00:23:05.980 --> 00:23:06.980
Exactly.

00:23:06.980 --> 00:23:07.980
Sharks with lasers, that sort of thing.

00:23:07.980 --> 00:23:09.980
And who wouldn't want that?

00:23:09.980 --> 00:23:11.980
And so what's happened in the intervening six months?

00:23:11.980 --> 00:23:14.980
So I think two important things have happened.

00:23:14.980 --> 00:23:18.980
The first one is the re-architecting of PyScript.

00:23:18.980 --> 00:23:23.980
And just to reinforce what Fabio said.

00:23:23.980 --> 00:23:31.980
Maybe six months ago, when we said PyScript is Python in the browser, the emphasis was on Python and not so much in the browser.

00:23:31.980 --> 00:23:32.980
Okay.

00:23:32.980 --> 00:23:36.980
Because we've been joined, you know, our colleague Andrea is very much of the web world.

00:23:36.980 --> 00:23:41.980
In fact, his nickname inside the team is Web Yoda for a very good reason.

00:23:41.980 --> 00:23:42.980
Okay.

00:23:42.980 --> 00:23:53.980
It's now, you know, Python and we have in the browser has been kind of worked on and we've been looking at how that sort of works and how these two sort of things mesh together.

00:23:53.980 --> 00:24:05.980
Because Andrea is frankly incredible at this sort of stuff and he's kind of off the web and he knows the idioms and he knows the APIs and he knows how the browsers work and things like that.

00:24:05.980 --> 00:24:09.980
The actual PyScript core that's coming next is very small and very flexible.

00:24:09.980 --> 00:24:11.980
So that's the first sort of pillar of this.

00:24:11.980 --> 00:24:14.980
Second pillar goes by the name of Damien.

00:24:14.980 --> 00:24:16.980
We all know and love in Melbourne.

00:24:16.980 --> 00:24:18.980
And, you know, Damien's a buddy.

00:24:18.980 --> 00:24:19.980
We worked on the micro bit together.

00:24:19.980 --> 00:24:22.980
That's how we first got to know each other.

00:24:22.980 --> 00:24:29.980
And clearly, I don't think in a million years, Damien imagined that micro Python would be running on a browser.

00:24:29.980 --> 00:24:32.980
That's completely the opposite end of the computing spectrum.

00:24:32.980 --> 00:24:37.980
Watch, watch micro Python become the most popular base to run Python globally.

00:24:37.980 --> 00:24:39.980
It easily could if it goes out on the web.

00:24:39.980 --> 00:24:40.980
Exactly.

00:24:40.980 --> 00:24:41.980
Now, here's the thing.

00:24:41.980 --> 00:24:48.980
Because Pyodide is CPython compiled to WebAssembly and that's, we started with PySquid.

00:24:48.980 --> 00:24:55.980
But depending on how you build it, it's around 11 megabytes if you had the whole everything but the kitchen sink in there.

00:24:55.980 --> 00:24:55.980
Okay.

00:24:55.980 --> 00:24:57.980
And that's a lot for a web page.

00:24:57.980 --> 00:24:58.980
Okay.

00:24:58.980 --> 00:25:05.980
I know everybody says the New York Times is however many megabytes it is, but still 11 megs is large.

00:25:05.980 --> 00:25:08.980
And it doesn't play well with these black mirrors that we carry around in our pocket.

00:25:08.980 --> 00:25:15.980
Micro Python, I noticed today, thanks to compression and other things, it's down to 170k.

00:25:15.980 --> 00:25:17.980
Let's deliver into the browser.

00:25:17.980 --> 00:25:23.980
And with the 50, 50 plus 50 odd K for the core of PyScript.

00:25:23.980 --> 00:25:24.980
And then we're going to do the next thing.

00:25:24.980 --> 00:25:34.980
We have an incredible, it's around half a megabyte to get the thing into your browser, which I think it was Simon Willis and said that's smaller than some hero images you get on websites.

00:25:34.980 --> 00:25:35.980
Okay.

00:25:35.980 --> 00:25:37.980
So you get a development environment.

00:25:37.980 --> 00:25:40.980
So we reached out to Damien and Damien's been working with us.

00:25:40.980 --> 00:25:50.980
He'd be doing an awful lot of work, impeccable work, excellent work to make sure that the story of MicroPython in the browser is that it's kind of like a first class Python.

00:25:50.980 --> 00:25:51.980
Okay.

00:25:51.980 --> 00:25:58.980
So he has implemented the FFI, the foreign function interface between Python and the JavaScript context.

00:25:58.980 --> 00:25:59.980
Okay.

00:25:59.980 --> 00:26:02.980
It's the same sort of API as you get in Pyodide.

00:26:02.980 --> 00:26:03.980
Okay.

00:26:03.980 --> 00:26:04.980
So it's familiar.

00:26:04.980 --> 00:26:05.980
Okay.

00:26:05.980 --> 00:26:07.980
So you import JS and then you're away.

00:26:07.980 --> 00:26:09.980
You're referencing things in the land of JavaScript.

00:26:09.980 --> 00:26:14.980
To be clear for people listening, that means you can hook button click events.

00:26:14.980 --> 00:26:18.980
You can hook document ready mouse, like in Python.

00:26:18.980 --> 00:26:19.980
What APIs?

00:26:19.980 --> 00:26:19.980
Functions.

00:26:19.980 --> 00:26:20.980
Functions.

00:26:20.980 --> 00:26:21.980
Yep.

00:26:21.980 --> 00:26:22.980
I want to play some audio.

00:26:22.980 --> 00:26:25.980
There's an audio API built into the web, into the browser.

00:26:25.980 --> 00:26:32.980
I can import from import JS and then do JS.audio as a class to instantiate something to then play.

00:26:32.980 --> 00:26:37.980
It's just super easy and a real joy to use, but it starts like that.

00:26:37.980 --> 00:26:43.980
And this is, I think the key aspects of the difference between MicroPython and Pyodide.

00:26:43.980 --> 00:26:45.980
Pyodide gives you all of Python.

00:26:45.980 --> 00:26:46.980
Okay.

00:26:46.980 --> 00:26:50.980
So you want to do some data science or you want to bring in some CPython module to work in the browser.

00:26:50.980 --> 00:26:51.980
You use Pyodide.

00:26:51.980 --> 00:26:59.980
But if you want something Python-ish and it's fast and it goes like the clappers and it's really quick to load, then MicroPython is the thing for you.

00:26:59.980 --> 00:27:05.980
If you want to start manipulating the DOM and working with what the browser makes available to you.

00:27:05.980 --> 00:27:11.980
And so to answer Sarah's point, maybe MicroPython is the thing that you should be using to coordinate with that.

00:27:11.980 --> 00:27:13.980
I think it certainly is an alternative to Vue.

00:27:13.980 --> 00:27:14.980
It would be.

00:27:14.980 --> 00:27:15.980
Yeah.

00:27:15.980 --> 00:27:39.980
I think it's really great to see projects like MicroPython coming together with Pyodide and PyScript all talking, hey, how can we make things be, share the best parts of each project and have a common interface to interface JavaScript?

00:27:39.980 --> 00:27:41.980
How can we make this happen?

00:27:41.980 --> 00:27:44.980
How can we support MicroPython in PyScript?

00:27:44.980 --> 00:27:57.980
And so it was, I really need to thank Damien, Hood, Roman from those projects to be so nice and so easy to work with and willing to just, yeah, let's talk about it.

00:27:57.980 --> 00:27:59.980
Let's see what's best for the community.

00:27:59.980 --> 00:28:01.980
And yeah, great, great work.

00:28:01.980 --> 00:28:03.980
Yeah, it's an absolute joy.

00:28:03.980 --> 00:28:05.980
And I'll tell you a funny story.

00:28:05.980 --> 00:28:10.980
Just after Christmas, we met up the PyScript team in real life for the first time.

00:28:10.980 --> 00:28:14.980
And because we were all in the same place and we had Hood with us, Hood has since joined the team.

00:28:14.980 --> 00:28:23.980
And because of time zones, we were all able to drop onto a call with Damien and having Hood and Damien talk together for the first time.

00:28:23.980 --> 00:28:28.980
You'd think, you know, these are exceptionally gifted engineers.

00:28:28.980 --> 00:28:29.980
Okay.

00:28:29.980 --> 00:28:40.980
And after maybe, I don't know, two minutes of small talk, they were talking about, I don't know, the intricacies of garbage collection in the WebAssembly context.

00:28:40.980 --> 00:28:47.980
And, you know, the whole kind of conversation just went, they exploded off into the technical sort of ether as it were.

00:28:47.980 --> 00:28:56.980
But what I want to highlight is that PyScript has sort of lit a fuse underneath and these projects working together.

00:28:56.980 --> 00:28:59.980
And it's so wonderful to see the open source community working in the way that it should.

00:28:59.980 --> 00:29:10.980
You know, people bringing the best themselves and being very humble and listening and being compassionate to other people when they, when there are differences of opinion and there are always differences of opinion.

00:29:10.980 --> 00:29:17.980
One of the things that I take away from this project is the amount of fun I have working on this, that people pay me to do this is incredible.

00:29:17.980 --> 00:29:18.980
So.

00:29:18.980 --> 00:29:19.980
That's awesome.

00:29:19.980 --> 00:29:24.980
This portion of Talk Python To Me is brought to you by Sentry.

00:29:24.980 --> 00:29:33.980
You know Sentry for their error tracking service, but did you know you can take that all the way through your multi-tiered and distributed app with their distributed tracing feature?

00:29:33.980 --> 00:29:44.980
Distributed tracing is a debugging technique that involves tracking requests of your system starting from the very beginning, like a user action, all the way to the backend, database and third party services.

00:29:44.980 --> 00:29:50.980
This can help you identify if the cause of an error in one project is due to the error in another.

00:29:50.980 --> 00:29:55.980
Every system can benefit from distributed tracing, but they're especially useful for microservices.

00:29:55.980 --> 00:29:58.980
In this architecture, logs won't give you the full picture.

00:29:58.980 --> 00:30:01.980
So you can't debug every request in full just by reading the logs.

00:30:01.980 --> 00:30:10.980
Distributed tracing with a platform like Sentry gives you a visual overview about which services were called during the execution of certain requests.

00:30:10.980 --> 00:30:17.980
Aside from debugging and visualizing your architecture, distributed tracing also helps you identify performance bottlenecks.

00:30:17.980 --> 00:30:26.980
Through a visual like a Gantt chart, you can see if a particular span in your stack took longer than expected and how it could be causing slowdowns in other parts of your app.

00:30:26.980 --> 00:30:31.980
Learn more and see some examples in the tracing section at docs.Sentry.io.

00:30:31.980 --> 00:30:35.980
To take advantage of all the features of the Sentry platform, just create your free account.

00:30:35.980 --> 00:30:44.980
And for all of you Talk Python listeners, use the code TALKPYTHON, all one word, and you'll activate a free month of their premium paid features.

00:30:44.980 --> 00:30:48.980
Get started today at talkpython.fm/sentry-trace.

00:30:48.980 --> 00:30:52.980
That link is in your podcast player show notes and the episode page.

00:30:52.980 --> 00:30:55.980
Thank you to Sentry for supporting Talk Python To Me.

00:30:55.980 --> 00:31:03.980
We kind of introduced the possibility and what we can do with PyScript pretty well, but I can't resist showing this video here.

00:31:03.980 --> 00:31:11.980
So, Nicholas, you have a one minute video, which I'm going to link to, that shows Python running in the browser, which is great.

00:31:11.980 --> 00:31:18.980
And then very nicely, you have it running on a mobile phone, which is really nice.

00:31:18.980 --> 00:31:19.980
Yeah.

00:31:19.980 --> 00:31:20.980
Tell people where it runs next.

00:31:20.980 --> 00:31:21.980
In a car.

00:31:21.980 --> 00:31:26.980
So, Tesla is basically a computer on wheels and it has a browser built in.

00:31:26.980 --> 00:31:28.980
This loosey-goosey app.

00:31:28.980 --> 00:31:30.980
A colleague of mine, you know, clearly I'm British.

00:31:30.980 --> 00:31:33.980
And she said to me, you've got to be loosey-goosey about this.

00:31:33.980 --> 00:31:34.980
She's from Boston.

00:31:34.980 --> 00:31:37.980
And I was like, what on earth is loosey-goosey?

00:31:37.980 --> 00:31:38.980
And she explained.

00:31:38.980 --> 00:31:42.980
And since then I've been getting loosey-goosey into all of these kind of places, just to pull her leg a little bit.

00:31:42.980 --> 00:31:49.980
You click on the goose and it uses the underlying browser's audio API to go honk, right?

00:31:49.980 --> 00:31:51.980
So, it's just honking on demand.

00:31:51.980 --> 00:31:57.980
And the fact that you can get a car to honk like a goose kind of seems kind of appropriate in a funny sort of way.

00:31:57.980 --> 00:31:58.980
It certainly is for Teslas.

00:31:58.980 --> 00:31:59.980
Yeah, yeah.

00:31:59.980 --> 00:32:00.980
Exactly.

00:32:00.980 --> 00:32:01.980
Exactly.

00:32:01.980 --> 00:32:02.980
They already make weird noises.

00:32:02.980 --> 00:32:06.980
This is MicroPython running on the Tesla, playing goosey.

00:32:06.980 --> 00:32:07.980
I love it.

00:32:07.980 --> 00:32:08.980
Hang on a mobile.

00:32:08.980 --> 00:32:09.980
Yeah.

00:32:09.980 --> 00:32:14.980
So, maybe the next thing that we could do here is we could talk about one of the bigger announcements that you had recently.

00:32:14.980 --> 00:32:19.980
So, there's probably two plus the shift in API and the changes there.

00:32:19.980 --> 00:32:23.980
But one, whoever wants to take this is PyScript.com.

00:32:23.980 --> 00:32:25.980
Yeah, I can talk real quick about it.

00:32:25.980 --> 00:32:26.980
Here's the beginning.

00:32:26.980 --> 00:32:29.980
Part of the vision when we started was, okay, cool.

00:32:29.980 --> 00:32:32.980
PyScript needs to be open source and everything always.

00:32:32.980 --> 00:32:33.980
How can we make it?

00:32:33.980 --> 00:32:35.980
It's on the browser, right?

00:32:35.980 --> 00:32:43.980
Like, how can we make it even easier for people to just hop in somewhere, start a project and just share it with others.

00:32:43.980 --> 00:32:47.980
And that was, okay, we need a product or something like this.

00:32:47.980 --> 00:32:52.980
So, we launched PyScript.com, which is a free service or a freemium service.

00:32:52.980 --> 00:33:04.980
Right now, we actually, the only option for paid features or anything like this is really just through being a founder, which is basically in the Kickstarter model, you want to support the project.

00:33:04.980 --> 00:33:05.980
It really is what it is.

00:33:05.980 --> 00:33:08.980
A little bit like a GitHub sponsor, kind of.

00:33:08.980 --> 00:33:09.980
Yes.

00:33:09.980 --> 00:33:10.980
Yeah.

00:33:10.980 --> 00:33:17.980
And we will always have a free tier with unlimited projects, unlimited ways you can share it, etc.

00:33:17.980 --> 00:33:24.980
And we're probably going to, we're going to have paid features for things that we're paying or things that make it worth, you know.

00:33:24.980 --> 00:33:31.980
But we want to have a place where people can just drop a snippet or a Python application, then share with others.

00:33:31.980 --> 00:33:55.980
Like, one thing that was super clear to me recently was after also the video of Nicolas was last keynote I gave in Columbia was, hey, how many of you, I asked the question, how many of you think you can write a Hello World application and then share with 30 people, not technical, like your mom, your family and others, and share with them within an hour.

00:33:55.980 --> 00:33:56.980
Right.

00:33:56.980 --> 00:33:57.980
Hello World without complexity.

00:33:57.980 --> 00:33:58.980
Exactly.

00:33:58.980 --> 00:33:59.980
And then what?

00:33:59.980 --> 00:34:01.980
And people showed that raise their hands out of 450.

00:34:01.980 --> 00:34:02.980
Yeah.

00:34:02.980 --> 00:34:06.980
And it'll take a good chunk of that hour to do it, even for the ones who can do it.

00:34:06.980 --> 00:34:07.980
Yeah.

00:34:07.980 --> 00:34:08.980
Yes.

00:34:08.980 --> 00:34:12.980
Or even worse, like in a day, not many more raised their hands.

00:34:12.980 --> 00:34:13.980
Right.

00:34:13.980 --> 00:34:18.980
The goal here is really like, you can just hop in, click, you know, start a new project.

00:34:18.980 --> 00:34:22.980
It's already conveniently already a Hello World application by default.

00:34:22.980 --> 00:34:23.980
Right.

00:34:23.980 --> 00:34:26.980
So, and by default, it's shareable anywhere.

00:34:26.980 --> 00:34:35.980
So all of a sudden you come from, hey, I'm not sure I can deploy the simplest app in the world to my audience and effectively to, it's just a matter of seconds.

00:34:35.980 --> 00:34:41.980
I just need to share the link and then can see, you know, they can see on mobile and things like this.

00:34:41.980 --> 00:34:42.980
Yeah.

00:34:42.980 --> 00:34:56.980
That's the striking thing that messaging that I think to me was clear that we're not doing a good job. Right. Like we're no, before PyScript, you could still deploy those things on mobile with Pyodide directly and stuff. But it wasn't that easy.

00:34:56.980 --> 00:34:57.980
Right.

00:34:57.980 --> 00:34:57.980
Right.

00:34:57.980 --> 00:34:58.980
Right.

00:34:58.980 --> 00:35:10.980
So Python adoption, Python and education, all of those use cases. That's why I really bag everyone. Talk about PyScript. And that's the value of sharing and spreading Python all over.

00:35:10.980 --> 00:35:24.980
Yeah. Let's look at one of these. So if you create an account, you log in, there's a trending in a featured set. So one of these is tic-tac-toe and I'll view the site that we can maybe talk about the code real quick. So I pulled this up in my browser. It's based on the Pyodide version.

00:35:25.980 --> 00:35:44.980
And down here you can, it does show the terminal just for people who are interested in the print statements, but you can just go play tic-tac-toe on yourself and, you know, end up, you just click crazy. I guess you'll win or something. Right. That was when this time, but it's, it shows the JavaScript interaction, the click down, the changing the DOM from Python, all those good things. Right.

00:35:44.980 --> 00:35:58.980
Yeah. And so you can go view the code for it. Maybe just, we could use this as a chance to just talk through a little bit of like how you're structuring this. Cause you've got a manifest, you've got a main.py, you've got an index.html.

00:35:58.980 --> 00:36:13.980
You come across an app that's written in with pyScript.com and you want to know how does it work? You know, the classic, you know, view source, the number of people who said I became a software engineer because in the nineties, when I was a teenager, I could right click view source and figure out what, okay, that's that. Okay.

00:36:13.980 --> 00:36:19.980
So I just wanted to highlight that that was, that was there. Any pyScript.com app, you'll be able to see the, see the source.

00:36:19.980 --> 00:36:20.980
Excellent. And you can copy.

00:36:20.980 --> 00:36:29.980
Yeah. And you also have a copy. Yeah, exactly. We're on the same page. There's a copy of the project, which has got like, like a clone this to my account and I'll play with it. Right. Yeah. Yeah. Yeah, exactly.

00:36:29.980 --> 00:36:41.980
Yeah. That's actually one thing that we've been struggling with terminology, trying to, do we use the usual geek technology, terminology, or we use, you know, user friendly, should we use copy or fork?

00:36:41.980 --> 00:36:53.980
Yeah. Yeah. Yeah. Yeah. Yeah. So tell people quickly about how, what you can do with pyScript.com, kind of how it works. It's a little bit like replet, but really Python focused, right?

00:36:53.980 --> 00:37:13.980
Yes. It's very similar to replet or, you know, code pen and other services like these, that the idea is that you have your space where you host your project. We have an editor right now. We're working also on creating views that are more user friendly. And you don't need to know about HTML or anything like that. Just hop in.

00:37:13.980 --> 00:37:29.980
But the nice thing about this is with any project, you can just hop in, see the Python code, how it was done, implemented and playing around it. And we always have the view of the files, then a preview with an iFrame that you can see your app while you develop and whatnot.

00:37:29.980 --> 00:37:34.980
Yeah. Mm hmm. Quickly about the geography of, of how the project is organized.

00:37:34.980 --> 00:37:35.980
Sure.

00:37:35.980 --> 00:37:51.980
You have your index.html, which is the thing that is first served to the browser. And if we, if we go look at that, we'll see that in there, it's just referencing basically all the other things. And it's just plain old HTML in there as well. So we've got PyScript being loaded as well. We've got some CSS.

00:37:51.980 --> 00:38:08.980
They've got the script, PyScript tag that tells us that main.py is where the application is going to be run from. And then we just have, you know, the HTML code for displaying the user interface. If we hop over to manifest.json, this is an old one.

00:38:08.980 --> 00:38:10.980
The others that have a PyScript.toml, right?

00:38:10.980 --> 00:38:11.980
Yes.

00:38:11.980 --> 00:38:14.980
I was just going to say, it's usually a PyScript.toml file.

00:38:14.980 --> 00:38:17.980
I can pull that up for us here.

00:38:17.980 --> 00:38:38.980
Yeah. Yeah. That's great. In the HTML file, it's going to be empty because there's nothing there, but this is where you, you start to define characteristics of the environment in which this app is going to run. So you might say packages equals, and then a list of packages that you want installed as if it were a requirements.txt file. Okay.

00:38:38.980 --> 00:38:40.980
Give me a sense of what I can put in that list.

00:38:40.980 --> 00:38:42.980
That looks good.

00:38:42.980 --> 00:38:43.980
I know.

00:38:43.980 --> 00:38:44.980
Anything that is pure Python.

00:38:44.980 --> 00:38:45.980
Okay.

00:38:45.980 --> 00:38:46.980
Almost, almost everything.

00:38:46.980 --> 00:38:47.980
Yeah.

00:38:47.980 --> 00:38:50.980
There are, there are complicated caveats, which we could go into.

00:38:50.980 --> 00:38:51.980
Yes.

00:38:51.980 --> 00:39:01.980
Overall, overall, the differentiator is really if you're using anything that does multiprocessing or threading or sockets, right? Like those on the browser don't really exist.

00:39:01.980 --> 00:39:02.980
Right.

00:39:02.980 --> 00:39:11.980
So I couldn't use PyMongo or Pg, Psycho or requests per se, because those are basically violating some.

00:39:11.980 --> 00:39:12.980
Yes.

00:39:12.980 --> 00:39:13.980
Browser.

00:39:13.980 --> 00:39:14.980
Yeah.

00:39:14.980 --> 00:39:20.980
A request specifically there, there is a pipe package that patches requests.

00:39:20.980 --> 00:39:23.980
So you can actually, it's called for Pyodide.

00:39:23.980 --> 00:39:25.980
It's Pyodide HTTP, I think.

00:39:25.980 --> 00:39:31.980
And it basically just patches everything from after you do that, then you can just import requests and use it normally.

00:39:31.980 --> 00:39:32.980
So it does work right now.

00:39:32.980 --> 00:39:32.980
Yes.

00:39:32.980 --> 00:39:40.980
But so the important thing is, is that you remember that your tab is the conceptually equivalent to your virtual inf.

00:39:40.980 --> 00:39:41.980
Okay.

00:39:41.980 --> 00:39:49.980
And so the PyScript.DOML file is just the way PyScript learns about how do you want to configure your environment for this.

00:39:49.980 --> 00:39:50.980
Okay.

00:39:50.980 --> 00:39:52.980
And then if we look in main.py, there we go.

00:39:52.980 --> 00:39:54.980
It's the classic Python.

00:39:54.980 --> 00:39:55.980
This is where you start.

00:39:55.980 --> 00:39:57.980
This is where you just type your Python code.

00:39:57.980 --> 00:40:05.980
Just go ahead, you know, import JS and then JS document dot whatever, you know, to get yourself into the DOM, that sort of stuff.

00:40:05.980 --> 00:40:06.980
Yeah.

00:40:06.980 --> 00:40:09.980
And from that, you have a link that you can share with anyone, right?

00:40:09.980 --> 00:40:10.980
Like it just works.

00:40:10.980 --> 00:40:11.980
Yeah.

00:40:11.980 --> 00:40:12.980
That's the power of it.

00:40:12.980 --> 00:40:13.980
Right.

00:40:13.980 --> 00:40:13.980
Yeah.

00:40:13.980 --> 00:40:14.980
Excellent.

00:40:14.980 --> 00:40:16.980
So yeah, I just got to share or copy it or whatever.

00:40:16.980 --> 00:40:17.980
Yeah.

00:40:17.980 --> 00:40:20.980
So this is a way for people to play with PyScript.

00:40:20.980 --> 00:40:28.980
I saw here in the index that you specifically refer to certain releases of PyScript here.

00:40:28.980 --> 00:40:37.980
So I guess presumably it's kind of however much you want to stay on the cutting edge of PyScript or kind of just take some version in time and stick with it.

00:40:37.980 --> 00:40:37.980
Yeah.

00:40:37.980 --> 00:40:38.480
Yeah.

00:40:38.480 --> 00:40:41.980
That's actually a great question because we've been discussing that a lot.

00:40:41.980 --> 00:40:46.980
And hey, just we should actually, should we remove latest and or unstable?

00:40:46.980 --> 00:40:54.980
Those are always linked to the latest stable release and the latest merged commit in the repo.

00:40:54.980 --> 00:41:05.980
And I think ultimately we're leaning towards yes and always spin the version mostly because that guarantees that, you know, we're going to change things under the rug for you and your app just works.

00:41:05.980 --> 00:41:07.980
It's been courteous to the user, isn't it?

00:41:07.980 --> 00:41:10.980
I mean, we don't want to do something that breaks their code.

00:41:10.980 --> 00:41:11.980
Okay.

00:41:11.980 --> 00:41:19.980
So if you pin it to, you know, PyScript version 0.0.1 alpha one, you know, from way back when dinosaurs ruled the world, but your code still works.

00:41:19.980 --> 00:41:23.980
It might not be the most up to date PyScript, but it's your code.

00:41:23.980 --> 00:41:24.980
It's your responsibility.

00:41:24.980 --> 00:41:27.980
If you want to update the runtime, you go knock yourself out.

00:41:27.980 --> 00:41:28.980
We need to do something.

00:41:28.980 --> 00:41:29.980
That's a good idea.

00:41:29.980 --> 00:41:36.980
So that brings up a bit of a comment from Toon Army out there who says, so we're just about out of alpha.

00:41:36.980 --> 00:41:39.980
Do not use in production question mark.

00:41:39.980 --> 00:41:40.980
Yeah, that's a good idea.

00:41:40.980 --> 00:41:41.980
What's the status?

00:41:41.980 --> 00:41:44.980
YOLO slash latest.

00:41:44.980 --> 00:41:45.980
Let's go.

00:41:45.980 --> 00:41:46.980
Backwards.

00:41:46.980 --> 00:41:52.980
So even with very stable things, I would always recommend pinning all the versions anyway.

00:41:52.980 --> 00:41:53.980
Right.

00:41:53.980 --> 00:41:54.980
I can.

00:41:54.980 --> 00:42:00.980
And even the secondary versions and whatnot, like when you deploy, pin the thing, pin the thing down.

00:42:00.980 --> 00:42:11.980
And that's what with PyScript.com, we're trying to basically put all those small details baked in so that you don't need to think about those and just use best practices.

00:42:11.980 --> 00:42:18.980
For instance, we are using config and PyConfig and PyScript with source and not having code in line, right?

00:42:18.980 --> 00:42:24.980
Because coding in line is great to get going, but it's really hard to read.

00:42:24.980 --> 00:42:26.980
Editors don't play well with it.

00:42:26.980 --> 00:42:28.980
It's hard to test your code, all of this.

00:42:28.980 --> 00:42:34.980
So we're saying just let's just use templates that are encouraging best practices and pinning the versions is one of them.

00:42:34.980 --> 00:42:35.980
Could I write unit tests?

00:42:35.980 --> 00:42:40.980
Could I have a page that is like test.html and then import pytest?

00:42:40.980 --> 00:42:41.980
I do that.

00:42:41.980 --> 00:42:42.980
And you start running the browser.

00:42:42.980 --> 00:42:43.980
Yeah.

00:42:43.980 --> 00:42:44.980
Yeah.

00:42:44.980 --> 00:42:45.980
So, okay, here's the thing.

00:42:45.980 --> 00:42:49.980
And we've not mentioned PyPicard or InventWat, we've renamed it.

00:42:49.980 --> 00:42:56.980
But when I was writing that before or the kind of proof of concept before PyCon, I had pytest running in the browser.

00:42:56.980 --> 00:42:58.980
I mean, why wouldn't you run it in the browser?

00:42:58.980 --> 00:43:01.980
That's the context literally in which this code is supposed to run.

00:43:01.980 --> 00:43:04.980
So let's run the test suite in the browser.

00:43:04.980 --> 00:43:05.980
And it just works.

00:43:05.980 --> 00:43:06.980
It's lovely.

00:43:06.980 --> 00:43:07.980
Yeah.

00:43:07.980 --> 00:43:11.980
It's a good idea to actually seeing the thing.

00:43:11.980 --> 00:43:14.980
A real kind of woohoo kind of fist pump.

00:43:14.980 --> 00:43:15.980
Yeah, that's fantastic.

00:43:15.980 --> 00:43:17.980
So speaking of you, why don't you?

00:43:17.980 --> 00:43:22.980
Yeah, I just want to mention one aspect, which is we don't always think about this.

00:43:22.980 --> 00:43:29.980
Because PyScript runs in your browser, in your clients, like there's no server side logic or anything like this.

00:43:29.980 --> 00:43:31.980
So scalability comes for free.

00:43:31.980 --> 00:43:37.980
You can scale your Hello World app to a billion users and not notice.

00:43:37.980 --> 00:43:40.980
Because all the computation is going to run on their end.

00:43:40.980 --> 00:43:41.980
Right?

00:43:41.980 --> 00:43:46.980
Which is another really cool aspect of the whole thing that we don't give enough credit to it.

00:43:46.980 --> 00:43:47.980
But it's important.

00:43:47.980 --> 00:43:49.980
Yeah, it absolutely is.

00:43:49.980 --> 00:43:52.980
Unless you have some kind of server sync type of thing.

00:43:52.980 --> 00:43:54.980
There's just there's no effort.

00:43:54.980 --> 00:43:54.980
Right?

00:43:54.980 --> 00:43:54.980
Yeah.

00:43:54.980 --> 00:43:56.980
Other than delivering the wasm bits.

00:43:56.980 --> 00:43:56.980
Yeah.

00:43:56.980 --> 00:43:57.980
All right.

00:43:57.980 --> 00:43:59.980
Somewhere buried in here, we have Piper card.

00:43:59.980 --> 00:44:00.980
There we go.

00:44:00.980 --> 00:44:01.980
Okay.

00:44:01.980 --> 00:44:03.980
So you mentioned you were working on this.

00:44:03.980 --> 00:44:05.980
Tell us about this, Nick.

00:44:05.980 --> 00:44:06.980
Okay.

00:44:06.980 --> 00:44:13.980
So Peter, when he announced PyScripts the world at PyCon last year, he said this is going to be for the 99%.

00:44:13.980 --> 00:44:16.980
And for that, he meant that not developers.

00:44:16.980 --> 00:44:17.980
Okay.

00:44:17.980 --> 00:44:20.980
And I'm old enough because I'm dinosaur.

00:44:20.980 --> 00:44:21.980
Really in internet time.

00:44:21.980 --> 00:44:24.980
You were on the internet before the web existed.

00:44:24.980 --> 00:44:34.980
I was actually, I was, I remember getting NCSA mosaic onto a 386 machine in my computing lab at university and got it.

00:44:34.980 --> 00:44:35.980
Oh my gosh.

00:44:35.980 --> 00:44:36.980
This is incredible.

00:44:36.980 --> 00:44:38.980
It was mind blowing.

00:44:38.980 --> 00:44:39.980
That's the first graphical.

00:44:39.980 --> 00:44:41.980
I can connect to NASA.

00:44:41.980 --> 00:44:42.980
That's amazing.

00:44:42.980 --> 00:44:43.980
I just said two minutes.

00:44:43.980 --> 00:44:44.980
I'll be able to download this picture.

00:44:44.980 --> 00:44:45.980
It'll be so remarkable.

00:44:45.980 --> 00:44:46.980
Yeah.

00:44:46.980 --> 00:44:47.980
There was Archie.

00:44:47.980 --> 00:44:48.980
There was gopher.

00:44:48.980 --> 00:44:49.980
There was telling us before the web.

00:44:49.980 --> 00:44:50.980
Okay.

00:44:50.980 --> 00:44:55.980
That's a whole different podcast for old fellows who were on the web back in the day.

00:44:55.980 --> 00:44:56.980
We should stop that now.

00:44:56.980 --> 00:44:57.980
We're turning into the full internet.

00:44:57.980 --> 00:44:58.980
Yeah.

00:44:58.980 --> 00:44:59.980
The internet used to have a sound.

00:44:59.980 --> 00:45:00.980
Nicholas.

00:45:00.980 --> 00:45:01.980
Yeah.

00:45:01.980 --> 00:45:02.980
Yeah.

00:45:02.980 --> 00:45:03.980
Oh, yes.

00:45:03.980 --> 00:45:04.980
Yes.

00:45:04.980 --> 00:45:05.980
Anyway.

00:45:05.980 --> 00:45:06.980
Sorry.

00:45:06.980 --> 00:45:07.980
Young people.

00:45:07.980 --> 00:45:09.980
Anyone under the age of 40.

00:45:09.980 --> 00:45:10.980
All right.

00:45:10.980 --> 00:45:11.980
Paper card.

00:45:11.980 --> 00:45:21.980
Back then when dinosaurs ruled the world, there was an incredible framework for writing GUI based

00:45:21.980 --> 00:45:23.980
apps on the early versions of the Mac.

00:45:23.980 --> 00:45:24.980
Okay.

00:45:24.980 --> 00:45:25.980
And it's called hyper card.

00:45:25.980 --> 00:45:29.980
And the concept is very easy to explain.

00:45:29.980 --> 00:45:32.980
The user interface is just made of a stack of cards.

00:45:32.980 --> 00:45:33.980
Okay.

00:45:33.980 --> 00:45:38.980
And there is always one card being displayed at once and you interact with that card.

00:45:38.980 --> 00:45:42.980
So there might be a button or there might be some text or a link or a picture or a movie.

00:45:42.980 --> 00:45:46.980
But when you interact with that, it transitions you to another card.

00:45:46.980 --> 00:45:53.980
So it's a little bit like, you know, again, from a similar vintage that those choose your own adventure games where, you know, if you want to kill troll, turn to page 291.

00:45:53.980 --> 00:45:56.980
If you want to run away, turn to page 32.

00:45:56.980 --> 00:45:58.980
So you transition to a new state.

00:45:58.980 --> 00:46:01.980
That's a new card or a new piece of text in the adventure game as it were.

00:46:01.980 --> 00:46:02.980
And so on and so.

00:46:02.980 --> 00:46:03.980
Okay.

00:46:03.980 --> 00:46:05.980
It's really easy to explain that to 11 year olds.

00:46:05.980 --> 00:46:06.980
Okay.

00:46:06.980 --> 00:46:19.980
And so we took that pipe a card model and we created something that we demoed at PyCon that allows you to essentially build apps on top of PyScript using these concepts.

00:46:19.980 --> 00:46:20.980
Okay.

00:46:20.980 --> 00:46:22.980
I'm not sure whether these will work still.

00:46:22.980 --> 00:46:24.980
The auto advance one works.

00:46:24.980 --> 00:46:27.980
You just have to have patience because it takes 10 seconds to auto advance.

00:46:27.980 --> 00:46:28.980
Yeah.

00:46:28.980 --> 00:46:29.980
Okay.

00:46:29.980 --> 00:46:37.980
So that, so these demos allow me to, you know, exercise different aspects of the underlying browser and how that interacts with Python and things.

00:46:37.980 --> 00:46:43.980
But what we've done is we've renamed it from a Piper card because that has a legacy.

00:46:43.980 --> 00:46:47.980
People think it's going to be hypercard when in fact it's not hypercard.

00:46:47.980 --> 00:46:54.980
It's actually Python in the browser, but we use that card like metaphor, but there are other things that we kind of, we want to build into that.

00:46:54.980 --> 00:47:18.980
So right now, literally this is what I do in my day is I'm thinking very hard and writing first draft of what Invent this framework will be so that it makes it easy for people to create user interface led applications using Python and PyScript in the browser, wherever the browser may be on your Tesla, on your mobile phone, on your tablet, on your desktop.

00:47:18.980 --> 00:47:19.980
It'll all look the same.

00:47:19.980 --> 00:47:38.980
Now I've been working at perhaps the Python end of things, but another aspect of this is that we want to make sure that we create a development environment that will probably end up in PyScript.com that will allow beginner coders in the same way that, you know, my work on Mew tries to give you a code editor.

00:47:38.980 --> 00:47:43.980
That's not as complicated as a Visual Studio Code, but it lets you get to the good stuff as quickly as possible.

00:47:43.980 --> 00:47:56.980
So it is a similar sort of philosophy will allow you to draw your user interface, allow you to create the logic that you need to make your app run without actually even realizing that under the hood, you've got Python running as well.

00:47:56.980 --> 00:48:03.980
So we should see Piper Card as kind of a proof of concept and then you're coming out with this, you called it Invent.

00:48:03.980 --> 00:48:04.980
Invent.

00:48:04.980 --> 00:48:09.980
So you literally import Invent and then import dot app or import dot whatever.

00:48:09.980 --> 00:48:10.980
Yeah.

00:48:10.980 --> 00:48:11.980
Not import.

00:48:11.980 --> 00:48:12.980
Invent.

00:48:12.980 --> 00:48:13.980
Yeah, yeah, yeah.

00:48:13.980 --> 00:48:15.980
In the end of the day over here in the UK.

00:48:15.980 --> 00:48:16.980
I'll say one thing to you, Nicholas.

00:48:16.980 --> 00:48:27.980
Actually, I'm a little disappointed, to be honest, that I'm the only one that actually is dogfooding type Invent and writing my talks with Invent and all of those.

00:48:27.980 --> 00:48:28.980
Yeah.

00:48:28.980 --> 00:48:29.980
You should please.

00:48:29.980 --> 00:48:30.980
For Pi.

00:48:30.980 --> 00:48:31.980
Hey, it's great.

00:48:31.980 --> 00:48:36.980
I've been using actually visual Pi script and Invent, et cetera, for my talk.

00:48:36.980 --> 00:48:39.980
And I was expecting you would say like, yeah, me too.

00:48:39.980 --> 00:48:40.980
They're like, oh, really?

00:48:40.980 --> 00:48:42.980
Really brave of you.

00:48:42.980 --> 00:48:45.980
Just left you hanging out.

00:48:45.980 --> 00:48:46.980
Yeah, yeah.

00:48:46.980 --> 00:48:48.980
I have a bank to rights.

00:48:48.980 --> 00:48:49.980
He's got me bank to rights.

00:48:49.980 --> 00:49:10.980
But honestly, one thing that I didn't think before while in the Uber to the conference the day before my, no, actually the day of my talk, the ability to actually check my slides and change them on the backseat of a car on my phone was mind blowing and really cool, which is it helps to the power of the framework itself.

00:49:10.980 --> 00:49:11.980
Yeah.

00:49:11.980 --> 00:49:12.980
Kudos.

00:49:12.980 --> 00:49:20.980
So you've told a good, really good story here, because now imagine that you are in a classroom in, I don't know, I'm just picking random kind of in Mexico.

00:49:20.980 --> 00:49:21.980
Okay.

00:49:21.980 --> 00:49:23.980
And you've got a class where there are kids with Chromebooks.

00:49:23.980 --> 00:49:24.980
Okay.

00:49:24.980 --> 00:49:29.980
Getting Python on there, getting any app to be built on those is difficult enough.

00:49:29.980 --> 00:49:36.980
Like with PyScript, it's going to be so much easier to sort of stories to do that sort of thing.

00:49:36.980 --> 00:49:36.980
Mm-hmm.

00:49:36.980 --> 00:49:39.980
So that's, we're working hard on that.

00:49:39.980 --> 00:49:43.980
And it's going to be a long journey, but we're confident that it'll, it'll produce good results.

00:49:43.980 --> 00:49:50.980
Do you have some dreams or have you thought about Git and GitHub integration into PyScript.com?

00:49:50.980 --> 00:49:58.980
Like if I had a PyScript.com thing and a GitHub repo, could I have one mirror the other so that I could do GitHub like things to it?

00:49:58.980 --> 00:49:59.980
Yeah.

00:49:59.980 --> 00:50:00.980
Go ahead, Nikos.

00:50:00.980 --> 00:50:09.980
I was going to say, I look forward to the feature request on our, you know, we're listening to the community.

00:50:09.980 --> 00:50:11.980
If that's something that you want, tell us about it.

00:50:11.980 --> 00:50:12.980
Yeah.

00:50:12.980 --> 00:50:16.980
Actually, I would love to hear more about how would you, people would envision it.

00:50:16.980 --> 00:50:24.980
So we already kind of already have it in the sense that people working on both PyScript.com, but also the OpenSearch project.

00:50:24.980 --> 00:50:27.980
We, we have a, a CLI for both, right?

00:50:27.980 --> 00:50:34.980
And the CLI on the open source side allows you to create new projects with a template to run them locally and those type of things.

00:50:34.980 --> 00:50:46.980
We have a plugin for that CLI that is a PyScript.com plugin that allows you to log in, log out, and then basically have a local copy version of your project that is on .com.

00:50:46.980 --> 00:50:57.980
And one of the first scenarios that we're thinking was, as a developer, probably not as a, as a non-technical user, but as a developer, I want to use GitHub for my virtual control things.

00:50:57.980 --> 00:51:00.980
And I want to use PyScript.com to deploy and change things.

00:51:00.980 --> 00:51:03.980
So we do have a minimal integration.

00:51:03.980 --> 00:51:09.980
We're going to be announcing and properly announcing and releasing those things in a month timeframe.

00:51:09.980 --> 00:51:09.980
Nice.

00:51:09.980 --> 00:51:13.980
You know, that is one of the most important use cases that we have.

00:51:13.980 --> 00:51:14.980
Yeah.

00:51:14.980 --> 00:51:25.980
Take my thoughts for what they are is, you know, very loosely informed, not a lot of skin in the game, but you know, with my, my website, my personal website, I use Hugo.

00:51:25.980 --> 00:51:29.980
And then I just push to a branch that triggers a deploy on Netlify.

00:51:29.980 --> 00:51:33.980
You know, there's kind of the Heroku type thing, right?

00:51:33.980 --> 00:51:36.980
It'd be cool if it kind of just like, it goes to this branch.

00:51:36.980 --> 00:51:38.980
That's what's on PyScript.com.

00:51:38.980 --> 00:51:42.980
If that's what I would love if I were doing the integration and using it, but yeah.

00:51:42.980 --> 00:51:43.980
Yeah.

00:51:43.980 --> 00:51:45.980
And that's one use case.

00:51:45.980 --> 00:51:49.980
Interesting that you mentioned, we've been looking at Heroku as well, et cetera.

00:51:49.980 --> 00:51:57.980
That kind of difficulty here is we're often used to a one repo, one app type of separation.

00:51:57.980 --> 00:52:04.980
But you may have like a one repo where let's say you collect all your talks over and that you give, you know, around conferences.

00:52:04.980 --> 00:52:08.980
And you may, you may want to have a folder and each folder is one app on PyScript.com.

00:52:08.980 --> 00:52:11.980
And how do we support those, you know, different workflows?

00:52:11.980 --> 00:52:14.980
That's the type of thing I'm thinking right now.

00:52:14.980 --> 00:52:16.980
And that, that is sure.

00:52:16.980 --> 00:52:21.980
Well, people who are using, using it, you know, reach out to these guys and give me your thoughts here.

00:52:21.980 --> 00:52:22.980
Thank you.

00:52:22.980 --> 00:52:23.980
We're getting, of course.

00:52:23.980 --> 00:52:24.980
Yeah.

00:52:24.980 --> 00:52:28.980
Maybe the last thing we should talk about is kind of PyScript next.

00:52:28.980 --> 00:52:30.980
Where are we going from here, folks?

00:52:30.980 --> 00:52:31.980
Yes.

00:52:31.980 --> 00:52:32.980
So let me use this real quick.

00:52:32.980 --> 00:52:35.980
And I think, I think you should have like a link to-

00:52:35.980 --> 00:52:37.980
I have a bunch of tabs open.

00:52:37.980 --> 00:52:38.980
That one.

00:52:38.980 --> 00:52:39.980
Perfect.

00:52:39.980 --> 00:52:40.980
So what's PyScript next?

00:52:40.980 --> 00:52:47.980
It's, as I said, like we're rewriting PyScript with a smaller core, more flexible, web native, et cetera, to allow different things.

00:52:47.980 --> 00:52:51.980
So this tech preview that we are formally launching next week.

00:52:51.980 --> 00:52:53.980
So y'all listening.

00:52:53.980 --> 00:52:56.980
It was awesome.

00:52:56.980 --> 00:52:59.980
I'm sure the release was amazing and it went really well.

00:52:59.980 --> 00:53:00.980
So perfect.

00:53:00.980 --> 00:53:01.980
Congratulations.

00:53:01.980 --> 00:53:04.980
That's very doctor who of you to say that.

00:53:04.980 --> 00:53:05.980
Yeah, it is.

00:53:05.980 --> 00:53:15.980
But the gist of it is that we rethought a lot of the core concepts and now we are allowed, we have, we're able to allow multiple interpreters.

00:53:15.980 --> 00:53:19.980
We have MicroPython by default, supported by defaults.

00:53:19.980 --> 00:53:25.980
All of the interpreters support execution on the main thread, just like the previous version of PyScript.

00:53:25.980 --> 00:53:36.980
But now also you support on a worker, web worker, which means you can run Python while the web is loading or while the page is doing other things.

00:53:36.980 --> 00:53:40.980
It's like there's another process or other processes in your page.

00:53:40.980 --> 00:53:42.980
That's what basically a web worker is.

00:53:42.980 --> 00:53:47.980
All right. That's been a big part of WebAssembly for quite a while, but you all haven't leveraged that previously, right?

00:53:47.980 --> 00:53:48.980
Yes.

00:53:48.980 --> 00:53:49.980
Yeah.

00:53:49.980 --> 00:53:58.980
And it was very painful for us because, you know, for instance, panel and internal projects of Anaconda, like they, they have all the examples ported to the web with Pyodide.

00:53:58.980 --> 00:54:04.980
And because we didn't support the workers yet, it was better for them to just use Pyodide directly.

00:54:04.980 --> 00:54:08.980
Now we can allow them to use PyScript and, you know, do all those things.

00:54:08.980 --> 00:54:15.980
We saw actually a type preview of even Django or FastAPI running on PyScript with workers, right?

00:54:15.980 --> 00:54:17.980
Like, which is extremely cool.

00:54:17.980 --> 00:54:30.980
And you can think of, it's hard to actually imagine, but even just the educational purpose of this, you can have wide running examples in your docs and you can just play with it, which is interesting.

00:54:30.980 --> 00:54:38.980
Well, I don't know how, how well PyScript plugs into this world, but there is an entire ecosystem that I don't operate very much in.

00:54:38.980 --> 00:54:44.980
But where you, if you had a, if you have WebAssembly, you can run it kind of like node can run JavaScript on a server.

00:54:44.980 --> 00:54:50.980
You can run WebAssembly stuff in the cloud on a server in a container, or you can run it directly.

00:54:50.980 --> 00:54:55.980
So in those scenarios, it makes tons of sense to say we're going to use PyScript to host FastAPI.

00:54:55.980 --> 00:54:56.980
And it, it has a meaning, right?

00:54:56.980 --> 00:55:00.980
It, it's not just browsers all the way down or something, right?

00:55:00.980 --> 00:55:02.980
It's, it has a purpose for being there.

00:55:02.980 --> 00:55:03.980
Yeah.

00:55:03.980 --> 00:55:04.980
Yeah.

00:55:04.980 --> 00:55:05.980
And I, well, I wish we had more time.

00:55:05.980 --> 00:55:10.980
I had, there's a lot going on in WebAssembly ecosystem as, as well to support this as well, which is cool.

00:55:10.980 --> 00:55:11.980
Yeah.

00:55:11.980 --> 00:55:19.980
But just in the interest of time, we, this next branch as well, it also supports communication between workers and the main thread and vice versa.

00:55:19.980 --> 00:55:22.980
So, and we can have multiple interpreters.

00:55:22.980 --> 00:55:26.980
Maybe one is Pyodide, another is Python, another is Lua.

00:55:26.980 --> 00:55:31.980
And we have examples of those that then they can communicate between each other, right?

00:55:31.980 --> 00:55:33.980
Like if you click on all together.

00:55:33.980 --> 00:55:34.980
Okay.

00:55:34.980 --> 00:55:38.980
So you've got JavaScript starting MicroPython in a WebWorker.

00:55:38.980 --> 00:55:39.980
Okay.

00:55:39.980 --> 00:55:42.980
And then MicroPython saying hello back to JavaScript.

00:55:42.980 --> 00:55:49.980
But at the same time, MicroPython on the main thread has actually started in a WebWorker, a Lua interpreter.

00:55:49.980 --> 00:55:54.980
And Lua is saying back to the main thread to MicroPython, hi MicroPython.

00:55:54.980 --> 00:55:59.980
And then you've got MicroPython starting CPython on a WebWorker.

00:55:59.980 --> 00:56:05.980
And then when CPython has loaded and everything back to the MicroPython context, you know, hello MicroPython.

00:56:05.980 --> 00:56:07.980
This, you know, can you imagine?

00:56:07.980 --> 00:56:19.980
Well, I can actually, because I used to do some work for the UK government and I was on a data platform and the civil servants who were doing all the stats work in the Ministry of Justice were using our platform.

00:56:19.980 --> 00:56:25.980
And they would like, they would want data where they would, they wanted to grab data, then run, run it through some R thing.

00:56:25.980 --> 00:56:27.980
And then run it through some Python thing.

00:56:27.980 --> 00:56:30.980
And then stick it on a browser, you know, on a website somewhere.

00:56:30.980 --> 00:56:36.980
So some minister or a highfalutin civil servant can go and have a look at the graph of, I don't know, COVID.

00:56:36.980 --> 00:56:40.980
The spread of COVID through the UK prison system or something like that.

00:56:40.980 --> 00:56:42.980
Well, you can do that all in a single browser.

00:56:42.980 --> 00:56:47.980
The amount of stand on one leg, stick your finger in your ear and whistle, God save the king backwards.

00:56:47.980 --> 00:56:53.980
You needed to get that to work was, you know, it took them weeks to just get their development environment set up.

00:56:53.980 --> 00:56:58.980
With Web Workers, we've, and the multiple runtimes, we've kind of got that as a solution in now as well.

00:56:58.980 --> 00:57:02.980
Actually, the speed of loading speed.

00:57:02.980 --> 00:57:05.980
Like you didn't, we didn't have a loading stream.

00:57:05.980 --> 00:57:09.980
We didn't have like, actually, if you check the network.

00:57:09.980 --> 00:57:11.980
Let me try the map plot live.

00:57:11.980 --> 00:57:12.980
Yeah.

00:57:12.980 --> 00:57:15.980
Or just try my microphone and see how fast that brings you up.

00:57:15.980 --> 00:57:16.980
This one.

00:57:16.980 --> 00:57:17.980
Yeah, there we go.

00:57:17.980 --> 00:57:18.980
I mean, it's like instant.

00:57:18.980 --> 00:57:19.980
Yeah, it is instant.

00:57:19.980 --> 00:57:20.980
It's amazing.

00:57:20.980 --> 00:57:21.980
Yeah.

00:57:21.980 --> 00:57:23.980
And once it's cached, it's, you know.

00:57:23.980 --> 00:57:30.980
Yeah, it's this kind of stuff that I'm thinking like, then the front end framework type of story starts to become completely realistic.

00:57:30.980 --> 00:57:31.980
Yeah.

00:57:31.980 --> 00:57:38.980
Actually, the last one that I wanted to show actually is the next tab that you have a thing, which is, there you go.

00:57:38.980 --> 00:57:40.980
Can you open the console as well?

00:57:40.980 --> 00:57:41.980
Thank you.

00:57:41.980 --> 00:57:42.980
Should use my little hockey thing here.

00:57:42.980 --> 00:57:45.980
My little, is it like a hockey you can do to open those?

00:57:45.980 --> 00:57:46.980
Anyway.

00:57:46.980 --> 00:57:47.980
Yeah. Okay.

00:57:47.980 --> 00:57:49.980
If you go to console, actually, just to show the results.

00:57:49.980 --> 00:57:50.980
Yeah.

00:57:50.980 --> 00:57:51.980
Perfect.

00:57:51.980 --> 00:57:59.980
So this example is actually having, it's a Python input keyword stopping its execution, waiting for an answer.

00:57:59.980 --> 00:58:00.980
Oh.

00:58:00.980 --> 00:58:01.980
So it's actually blocking calls.

00:58:01.980 --> 00:58:02.980
You're good at math.

00:58:02.980 --> 00:58:03.980
Seven.

00:58:03.980 --> 00:58:04.980
Right.

00:58:04.980 --> 00:58:05.980
No, no, no, no, no.

00:58:05.980 --> 00:58:06.980
That's the JavaScript console.

00:58:06.980 --> 00:58:08.980
You want to type seven into the input.

00:58:08.980 --> 00:58:09.980
The input.

00:58:09.980 --> 00:58:10.980
Okay.

00:58:10.980 --> 00:58:18.980
So basically what's happening is it's blocking and then waiting for its goal while the page is still responsive and everything else.

00:58:18.980 --> 00:58:20.980
And then when you answer, it executes.

00:58:20.980 --> 00:58:21.980
Mm-hmm.

00:58:21.980 --> 00:58:22.980
Okay.

00:58:22.980 --> 00:58:24.980
Because that unlocks a lot of use cases.

00:58:24.980 --> 00:58:30.980
But debugger, for instance, like we can have breakpoints somewhere and you can go and debug your code.

00:58:30.980 --> 00:58:35.980
And a lot of scenarios that were not working before can work now.

00:58:35.980 --> 00:58:36.980
So this is very exciting.

00:58:36.980 --> 00:58:37.980
You know.

00:58:37.980 --> 00:58:38.980
Yeah.

00:58:38.980 --> 00:58:42.980
There's a lot of kind of under the hood stuff that has changed that enables us to do some really cool things.

00:58:42.980 --> 00:58:43.980
Yeah.

00:58:43.980 --> 00:58:44.980
Excellent.

00:58:44.980 --> 00:58:47.980
So with the web workers, do I get async and await?

00:58:47.980 --> 00:58:48.980
Yes.

00:58:48.980 --> 00:58:49.980
And proper async and await.

00:58:49.980 --> 00:58:50.980
Yes.

00:58:50.980 --> 00:58:51.980
That's fantastic.

00:58:51.980 --> 00:58:52.980
Okay.

00:58:52.980 --> 00:58:53.980
All right, guys.

00:58:53.980 --> 00:58:54.980
What else?

00:58:54.980 --> 00:58:59.980
What final things do you want to tell people before we wrap up this PyScript update episode?

00:58:59.980 --> 00:59:01.980
I've got two things.

00:59:01.980 --> 00:59:08.980
First one is if you want to play, if you want to have a look around, PyScript.com is the place to just get your hands dirty.

00:59:08.980 --> 00:59:12.980
And our colleagues who work on that have done an amazing job.

00:59:12.980 --> 00:59:17.980
And the feedback that you can give them through the form that you'll find on the website is read.

00:59:17.980 --> 00:59:22.980
And we care very deeply about, you know, the experience that users have and suggestions and things.

00:59:22.980 --> 00:59:23.980
So knock yourself out.

00:59:23.980 --> 00:59:24.980
Go and go and do that.

00:59:24.980 --> 00:59:28.980
And the second thing I want to say is that PyScript is open source software.

00:59:28.980 --> 00:59:35.980
So I know Fabio and myself are employed by Anaconda, but we have contributors who are not Anaconda employees.

00:59:35.980 --> 00:59:39.980
And, you know, we would love the community to come with us on this journey.

00:59:39.980 --> 00:59:40.980
Tell us what you want.

00:59:40.980 --> 00:59:47.980
Build a framework on top of PyScript, build plugins on top of PyScript, create a goofy app on top of PyScript, you know, put it on your Tesla or whatever.

00:59:47.980 --> 00:59:48.980
You know, I don't know.

00:59:48.980 --> 00:59:58.980
I would love, it would make my day if before the end of the year, somebody's gone, Hey, I've built a death star using PyScript or some ridiculous project or whatever.

00:59:58.980 --> 01:00:00.980
And, you know, I go, wow.

01:00:00.980 --> 01:00:02.980
Like I said, I never thought someone would do that.

01:00:02.980 --> 01:00:05.980
That's be playful, explore, be creative, have fun.

01:00:05.980 --> 01:00:07.980
That's what I want to see.

01:00:07.980 --> 01:00:08.980
That's what I want to see.

01:00:08.980 --> 01:00:09.980
I don't know, Fabio, how about you?

01:00:09.980 --> 01:00:10.980
Yeah.

01:00:10.980 --> 01:00:16.980
I would actually just double down what you said and actually encourage everyone to reach out.

01:00:16.980 --> 01:00:23.980
We were trying to make it a good tool for anyone to learn programming or to share your things, et cetera.

01:00:23.980 --> 01:00:36.980
And a lot of the difficulties we have all the time is trying to think with new users' brain or, you know, a student's brain and people with different backgrounds.

01:00:36.980 --> 01:00:40.980
Because unfortunately or fortunately, we've been in this game for 20 years.

01:00:40.980 --> 01:00:40.980
Right.

01:00:40.980 --> 01:00:41.980
So it's really hard.

01:00:41.980 --> 01:00:44.980
So what we say, reach out, we need you.

01:00:44.980 --> 01:00:45.980
We really mean it.

01:00:45.980 --> 01:00:55.980
Like, yeah, we, I think I strongly believe that all open source projects are about people and benefit from the diversity.

01:00:55.980 --> 01:00:55.980
Right.

01:00:55.980 --> 01:00:58.980
Like, good docs are made by non-developers.

01:00:58.980 --> 01:01:08.980
Good, you know, good content is made by, you know, people that have passion for hopping on a video and talking about the stuff.

01:01:08.980 --> 01:01:13.980
And I'm trying to convince my daughter to have like a PyScript channel on TikTok, you know, just to talk.

01:01:13.980 --> 01:01:14.980
Oh, that'd be cool.

01:01:14.980 --> 01:01:14.980
Yeah.

01:01:14.980 --> 01:01:15.980
Right.

01:01:15.980 --> 01:01:16.980
To talk the lingo.

01:01:16.980 --> 01:01:23.980
So we really value you reaching out and coming and helping us be more, you know, human as a project.

01:01:23.980 --> 01:01:32.980
And the second thing is really help us spread the word and make it popular so that we can make Python even more popular and help people.

01:01:32.980 --> 01:01:48.980
So, which I think in this age where we have AI and big tech companies and algorithms and all of that giving power to people to just run programming language on their machines and the distributed nature of PyScript, I think it's important today.

01:01:48.980 --> 01:01:50.980
So, yeah, that's all I have.

01:01:50.980 --> 01:01:51.980
I wanted to say.

01:01:51.980 --> 01:01:52.980
Yeah. Excellent.

01:01:52.980 --> 01:01:53.980
Maybe a quick final question.

01:01:53.980 --> 01:01:56.980
Marwan says, any work on the HTML canvas via PyScript?

01:01:56.980 --> 01:01:59.980
Thinking of simple stuff like creating a snake game.

01:01:59.980 --> 01:02:00.980
Okay.

01:02:00.980 --> 01:02:02.980
So, everyone import JS.

01:02:02.980 --> 01:02:03.980
Now you have global this.

01:02:03.980 --> 01:02:04.980
Okay.

01:02:04.980 --> 01:02:06.980
Now you have access to your canvas.

01:02:06.980 --> 01:02:14.980
And it's the same API because we're proxying the JavaScript objects as you'll find on like the Mozilla, you know, developer docs.

01:02:14.980 --> 01:02:15.980
So go knock yourself out.

01:02:15.980 --> 01:02:16.980
Awesome.

01:02:16.980 --> 01:02:17.980
Yeah.

01:02:17.980 --> 01:02:18.980
That's what I imagine.

01:02:18.980 --> 01:02:21.980
MDN network, W3 schools, if you can choose.

01:02:21.980 --> 01:02:22.980
Yes.

01:02:22.980 --> 01:02:23.980
Yes.

01:02:23.980 --> 01:02:29.980
I'm also working on a higher level of web API for PyScript, which will help with that as well.

01:02:29.980 --> 01:02:32.980
Make it the API more Pythonic.

01:02:32.980 --> 01:02:34.980
But what they call that is available today.

01:02:34.980 --> 01:02:35.980
And you can just, you know.

01:02:35.980 --> 01:02:36.980
Yeah.

01:02:36.980 --> 01:02:38.980
And you get to reuse your JavaScript skills if you have.

01:02:38.980 --> 01:02:39.980
Yeah.

01:02:39.980 --> 01:02:40.980
It's the same API.

01:02:40.980 --> 01:02:41.980
It's the same API.

01:02:41.980 --> 01:02:42.980
Yeah.

01:02:42.980 --> 01:02:43.980
All right, guys.

01:02:43.980 --> 01:02:44.980
Thank you for being here.

01:02:44.980 --> 01:02:45.980
Thank you for this project.

01:02:45.980 --> 01:02:46.980
It's really, really exciting.

01:02:46.980 --> 01:02:53.980
And I look forward to catching up again and seeing what else you've built in six months, three years, whenever it turns out to be.

01:02:53.980 --> 01:02:54.980
Yes.

01:02:54.980 --> 01:02:57.980
And thank you, Michael, for this and running the show.

01:02:57.980 --> 01:02:58.980
This is always a great fun.

01:02:58.980 --> 01:02:59.980
Thank you.

01:02:59.980 --> 01:03:00.980
Thank you.

01:03:00.980 --> 01:03:01.980
Yeah, you bet.

01:03:01.980 --> 01:03:02.980
Bye.

01:03:02.980 --> 01:03:03.980
Bye.

01:03:03.980 --> 01:03:06.340
This has been another episode of Talk Python To Me.

01:03:06.340 --> 01:03:08.160
Thank you to our sponsors.

01:03:08.160 --> 01:03:09.760
Be sure to check out what they're offering.

01:03:09.760 --> 01:03:11.180
It really helps support the show.

01:03:11.180 --> 01:03:16.020
The folks over at JetBrains encourage you to get work done with PyCharm.

01:03:16.020 --> 01:03:21.580
PyCharm Professional understands complex projects across multiple languages and technologies,

01:03:21.580 --> 01:03:27.240
so you can stay productive while you're writing Python code and other code like HTML or SQL.

01:03:27.240 --> 01:03:32.380
Download your free trial at talkpython.fm/donewithpycharm.

01:03:32.900 --> 01:03:34.780
Take some stress out of your life.

01:03:34.780 --> 01:03:40.260
Get notified immediately about errors and performance issues in your web or mobile applications with

01:03:40.260 --> 01:03:40.560
Sentry.

01:03:40.560 --> 01:03:45.560
Just visit talkpython.fm/sentry and get started for free.

01:03:45.560 --> 01:03:49.160
And be sure to use the promo code talkpython, all one word.

01:03:49.160 --> 01:03:50.860
Want to level up your Python?

01:03:50.860 --> 01:03:54.900
We have one of the largest catalogs of Python video courses over at Talk Python.

01:03:54.900 --> 01:04:00.080
Our content ranges from true beginners to deeply advanced topics like memory and async.

01:04:00.080 --> 01:04:02.740
And best of all, there's not a subscription in sight.

01:04:02.820 --> 01:04:05.660
Check it out for yourself at training.talkpython.fm.

01:04:05.660 --> 01:04:10.340
Be sure to subscribe to the show, open your favorite podcast app, and search for Python.

01:04:10.340 --> 01:04:11.640
We should be right at the top.

01:04:11.640 --> 01:04:16.800
You can also find the iTunes feed at /itunes, the Google Play feed at /play,

01:04:16.800 --> 01:04:21.020
and the direct RSS feed at /rss on talkpython.fm.

01:04:21.880 --> 01:04:24.460
We're live streaming most of our recordings these days.

01:04:24.460 --> 01:04:27.860
If you want to be part of the show and have your comments featured on the air,

01:04:27.860 --> 01:04:32.280
be sure to subscribe to our YouTube channel at talkpython.fm/youtube.

01:04:32.280 --> 01:04:34.120
This is your host, Michael Kennedy.

01:04:34.120 --> 01:04:35.420
Thanks so much for listening.

01:04:35.420 --> 01:04:36.580
I really appreciate it.

01:04:36.840 --> 01:04:38.500
Now get out there and write some Python code.

01:04:38.500 --> 01:04:59.340
I'll see you next time.

