Python's data science and visualization capabilities are certainly one of the reasons for its meteoric
rise over the past 10 years. But often, those visuals have been corralled into notebooks used
by data scientists themselves or into static web pages. Recently, a host of excellent dashboard
building and hosting frameworks have come along to turn these visuals into interactive apps for
everyone. On this episode, we'll talk about H2O Wave, one of these excellent dashboard frameworks.
We have Martin Taroshi from H2O.ai here to tell us about Wave. This is Talk Python to Me,
episode 386, recorded October 3rd, 2022. Welcome to Talk Python to Me, a weekly podcast on Python.
This is your host, Michael Kennedy. Follow me on Twitter where I'm @mkennedy, and keep up with
the show and listen to past episodes at talkpython.fm. And follow the show on Twitter via at Talk Python.
We've started streaming most of our episodes live on YouTube. Subscribe to our YouTube channel over
at talkpython.fm/youtube to get notified about upcoming shows and be part of that episode.
This episode is sponsored by Microsoft for startups founders hub. Check them out at talkpython.fm slash
founders hub to get early support for your startup. And it's brought to you by Sentry. Don't let those
errors go unnoticed. Use Sentry. Get started at talkpython.fm/sentry. Transcripts for this
and all of our episodes are brought to you by Assembly AI. Do you need a great automatic speech to text API?
Get human level accuracy in just a few lines of code. Visit talkpython.fm/assemblyai.
Martin, welcome to Talk Python to Me.
Thanks, Michael. Thanks for having me.
Oh, it's really great to have you here. I'm super excited to learn about H2O Wave. It looks like a
really cool project. That's one of these enabling, empowering projects for people who don't feel like,
oh, I could take my whatever I'm building, my ML model or whatever, or my data analysis and turn it
into a website or an app or any of those sorts of things. And they'll see that they can with Wave,
right? Yeah, that's right. Yeah, should be tons of fun. I think it's going to be a relevant topic for a
lot of people. Before we get to any of it, though, tell me about your background. How do you get into
programming in Python? Like most people do. I went to college, studied programming, computer science.
I started working originally as a Java developer, actually, then switched to web developer because
there was a lack of front-end engineers. And once I joined H2O, I mostly work on front-end here as
well. But I somehow got in charge of this Python framework. So I need to write a lot of Python
on day-to-day basis as well.
I think one of the big ironies of these data science tools and these nice Python visualization
tools is they're there to let people write Python so they don't have to write a ton of front-end code or
those kinds of things or write their own web frameworks or use Vue or React. And yet people
like you who actually make them spend so much time in the JavaScript side of things, right? I mean,
same thing for Jupyter. You know, it's someone's got to do it. And you're kind of doing it for
everyone else who uses it and gets to avoid it, right?
Yeah, that's right. I mean, you know, if you have a look at it, then front-end engineering is
quite complex topic these days compared to what it has been, let's say, 20 years ago.
You mean it's more than just linking to jQuery on a CDN?
Definitely.
It used to be so straightforward. And it really is. If you don't do it day-to-day, it's like,
how do I even get started to get this app up and going? It's crazy.
Yeah, exactly. And that's why we are here today to talk about how to make everyone's life easier.
That's right. Well, everyone but yours. You take the pain for the rest of us.
Yeah, but I kind of enjoy it. So that's not the problem.
Yeah, of course. If you love it, then it's all good. Before we get into Wave, you said you did,
you switched over to front-end stuff. What are your front-end technology favorites,
like front-end frameworks and stuff?
To be honest, I don't like frameworks at all. I like web as a platform because it also has become
very powerful. We have a lot of stuff that we didn't have before. But, you know, if you want to
build something enterprise-y or something that needs a longer maintenance, then you need to reach out for
frameworks. So currently, I've gone in React, which is, I would say, industry standard, but also have
experience with Vue or Angular. So at the end of the day, it's just a tool in our toolbox.
Pick one and go with it. And other front-end question, straight JavaScript or TypeScript?
Definitely TypeScript all the way.
Yeah?
Yeah. I mean, once you try TypeScript, then there's no way back.
Okay. I've done a little bit of TypeScript, but not enough to really pick it up, I don't think.
My JavaScript front-end experience is pretty limited. I try to stick with the Python side of things,
the server-side type of things as much as possible.
Speaking of which, sticking with Python, I guess maybe could get to the other question of what do
you do day-to-day? Kind of edge our way into this project? Day-to-day work on this H2O, right?
Yeah. Exactly. So basically, I work on H2O way, which is a framework for not only data scientists
and people making AI models to make their life easier, as you have already said, and to allow
them to build web applications without regular web knowledge like HTML, CSS, and JavaScript.
And my day-to-day concept is basically helping people out community-wise, answering questions,
getting new feature requests in. Then I have also two people, two developers, that I help with
bringing on their issues up, unblocking them. And I also need to code, bigger features
and basically picking on podcast if I have time.
Yeah. It sounds a little bit like a blend between sort of a program manager, software developer
on one half, and then dev evangelist almost on the other.
Yeah. In country where I come from, we call it a girl for everything. So basically you need to
jump on a lot of head.
Yeah. Perfect. All right. Well, give us the quick elevator pitch of H2O wave. It's four people,
you know, the, the headline, I guess the H1 of your website, if you will, is make AI apps.
Yeah, that's right. So basically I've already said H2O wave is a framework that allows you to build web
applications and dashboards with nothing but Python, no CSS, no HTML, no JavaScript required. However, if you wish
to sprinkle a little bit of JavaScript or CSS, then you definitely can. That's not a problem. And basically we try to build a rich library of widgets or components that are ready to use. And that should cover a wide range of scenarios that people might encounter. So at the end of the day, you end up with a very little bit of Python code that does very much.
Yeah. Let's set the stage a little, maybe thinking about what options do people have today? They've got an ML model that makes predictions, or maybe they've got something that will slice and dice the data and turn it into a graph, but you want to let them maybe pick the country by which you do, you pull the data from or the time range or some other aspect and make it a little bit interactive, you know, or even not, if you don't have that option, just make it static, I guess.
Like, what are the different things people are doing now that might relate to this?
Yeah, that's a great question. So the simplest thing that people can do is the regular tool of their interest is the notebook, which is very user friendly. You have just a single prompt, which you type into, and that behaves as a repo. And basically,
what they get in response are just static images of graphs or whatever. And these then can be then copy pasted as screenshots to either PowerPoint presentations or whatnot. However, this approach is, as you have said, somewhat static, and can be not so engaging, let's say. So that's where web application come into play, which can sprinkle a little bit of interactivity. So let's say you have a
So let's say you have a sidebar that has various controls like filters or maybe some sliders that adjust model values.
And on the right side, you get your visualization interactively in real time.
So this is something that has more storytelling power, let's say.
H2O Wave was initially built with this in mind as well.
Right, and Jupyter is fantastic.
I mean, so many people work in Jupyter and do amazing things, but it's not necessarily what you deliver to an end user.
If the CEO of your company says, hey, I want you to give me a dashboard that helps me understand, say, sales and cost this month,
you probably aren't going to just point them at your Jupyter Notebook on GitHub.
You probably still are not even going to point them at a version running on your server.
What if they want that updated every minute?
You know, with highlights or important stuff.
And they want to access it on their phone in a way that is like, you know, you have more control over how it lays out.
It's just, Jupyter is great, but it's not an end user technology.
It's an enabling technology, right?
It's like saying, well, I'm going to give PyCharm to a user to run my app.
It's like, well, no, no, no, no, no, no.
It's cool if you could run your code, but that's not the tool that you give them to do it with, right?
You package it up into a .app or whatever you're after.
Yeah, exactly.
And that's kind of the gap you're trying to close, right?
That's right.
Well, cool.
Okay.
Now, when I hear that, I think of a couple of other projects.
Streamlit, I interviewed Adrian back, I think it was 2019, who founded Streamlit.
And Streamlit is about building these really simple dashboards, sort of interactive places,
where, say, on the left, you've got a few things you can change.
And on the right, you might have some kind of graph, or you might get a 404 if you're clicking through the gallery right now.
But this is in that realm.
And then also, plotly dash as well.
Give us a sense of, like, how those compare.
Because there's probably people listening who are like, well, yeah, I'm really interested in this,
but I've already considered working with Streamlit.
Should I choose H2O Wave, or should I stick with Streamlit, or whatever?
Yeah, definitely.
So basically, one of the main reasons that Wave was built, because it's very similar to the project that you mentioned,
is that we were not very satisfied with either performance.
And the second reason was that, for example, Streamlit apps used to be very resource-heavy.
That means a lot of money in production costs.
So the reason was that Streamlit used to run a separate process for every single browser tab,
which, of course, demanded a lot of memory.
However, I have checked before this podcast to be 100% sure.
And it seems like they migrated to a single-threaded AsyncIO approach since then,
which is the same approach that, let's say, Dev or H2O Wave also follow.
So this is not a differentiator anymore.
The biggest differentiator is that H2O Wave has most features, let's say, most widgets to use.
And we also haven't seen any, let's say, regular web application beyond these filters and sliders that change your model outputs.
H2O Wave, we've seen, like, web applications that you would get maybe only software engineers could build, not the data scientists.
Right. So, for example, with Streamlit, what I often get, like, here I pulled up an example that they have, some real-time text thing.
And what you get is kind of this interactive, this one doesn't even have a sidebar.
It's pretty nice.
So you can, I've got a little drop-down and a button to start working with it.
But you don't have, like, a footer and a nav bar and multiple things on there with responsive layout.
And, you know, like a lot of the stuff you would expect, right?
It's still pretty close to what you might see on a notebook.
As nice as it is.
I do really like Streamlit.
Yeah, exactly.
We call this concept toy apps, let's say.
These are more like POCs, the stuff that we have talked to a while ago.
Wave is originally built with this in mind, but then somehow grew much larger that we can talk about it.
Yeah, it definitely seems like it's grown a bit more.
I haven't checked up on Streamlit enough to be able to follow along with exactly how many widgets they have and so on.
But, yeah.
Maybe compare to Plotly Dash as well.
Yes.
So I'm not very experienced with Plotly.
Neither am I, to be honest.
But assuming the same story there.
So they have a few form widgets, like text boxes, folders, drop-downs, etc.
That let you control the visualization.
But also, if you have a look, this visualization that you present, and these are like 3D models for our listeners who can see our screen.
Most likely, it's just third-party JavaScript library, which means that it's not necessarily a bundle of Plotly Dash.
So no Python API.
Right.
If we look over here at H2O Wave, the headline is Make AI Apps.
But it sounds to me like a broad range of apps could really land here.
If you're interested in almost any kind of reporting, dashboard, visualization, give us some ideas of the types of apps that people are building here.
The most common applications are the toy apps, as we have already discussed.
But once people truly discover the power of Wave, then they started to amaze us as developers.
Because they started to build production-grade applications that could be deployed and put to production and work just fine.
Right.
For example, H2O organized public, let's say, hackathon that aimed to save or to predict wildfires in California.
I believe in California, maybe in the whole world.
And one kind of software engineer built a truly wonderful Wave app that allowed them to submit their model, to preview them, to make scoreboard and everything within Wave application.
And it took in like two weeks, which is like incredible.
Yeah.
That's amazing.
Yeah.
But maybe some success story from a data scientist context, let's say, we have a team at H2O that wasn't very happy with one of our data science products.
So they decided, let's build one ourselves.
The result was that they have built, it's called Hydrogen Torch, a framework for deep learning.
And the result is a Wave application that was built within a week or two as an initial concept.
And it has features like you can train your models.
You can see how it predicts, let's say, computer vision models with the image annotations.
It has support for audio, if I remember correctly.
And it's...
Wow.
Yeah, exactly.
And it's simply just everything that you can expect from a regular web application.
And that blew my mind because the guys behind the Hydrogen Torch are not software engineers.
They are purely data scientists.
They are even Kaggle grandmasters for those who are aware of Kaggle platform.
And they were able to build it themselves, which is...
Oh, that's fantastic.
...mind-blowing to me.
Hydrogen Torch.
Okay.
Yeah, I haven't heard of that.
It looks pretty cool.
It has experiment flow and dataset connectors and even pre-processed datasets.
Yes.
And remember that these features were built by data scientists, which is something that you
would typically require a whole software engineering team, right?
Right.
Probably didn't even use any TypeScript or React.
No.
That's cool.
This portion of Talk Python to Me
is brought to you by
Microsoft for Startups Founders Hub.
Starting a business is hard.
By some estimates,
over 90% of startups
will go out of business
in just their first year.
With that in mind,
Microsoft for Startups
set out to understand
what startups need to be successful
and to create a digital platform
to help them overcome those challenges.
Microsoft for Startups Founders Hub
was born.
Founders Hub provides all founders
at any stage with free resources
to solve their startup challenges.
The platform provides technology benefits,
access to expert guidance
and skilled resources,
mentorship and networking connections,
and much more.
Unlike others in the industry,
Microsoft for Startups Founders Hub
doesn't require startups
to be investor-backed
or third-party validated to participate.
Founders Hub is truly open to all.
So what do you get if you join them?
You speed up your development
with free access to GitHub
and Microsoft Cloud computing resources
and the ability to unlock
more credits over time.
To help your startup innovate,
Founders Hub is partnering
with innovative companies
like OpenAI,
a global leader in AI research
and development,
to provide exclusive benefits
and discounts.
Through Microsoft for Startups Founders Hub,
becoming a founder
is no longer about who you know.
You'll have access
to their mentorship network,
giving you a pool of hundreds
of mentors across a range
of disciplines and areas
like idea validation,
fundraising,
management and coaching,
sales and marketing,
as well as specific
technical stress points.
You'll be able to book
a one-on-one meeting
with the mentors,
many of whom
are former founders themselves.
Make your idea a reality today
with the critical support
you'll get from Founders Hub.
To join the program,
just visit
talkpython.fm
slash Founders Hub,
all one word,
no links in your show notes.
Thank you to Microsoft
for supporting the show.
I think maybe to give,
to make this a little bit concrete
to help people get a sense
of how you work with this
and what it has to offer,
I want to maybe talk
through two areas.
I want to talk through
kind of getting started
what it looks like
to write some code here.
Also, maybe talk through
some of the widgets
because as you pointed out,
if you look through
the widgets section,
it's like a multi-level
hierarchy of things,
but there's
several hundred widgets
that you can use
so that's a lot
to just be able to,
you know,
write a few,
one line of Python
and bring in
some amazing UI element,
right?
Yeah, exactly.
But let's start with
going through the tutorial.
So,
we can talk through
maybe a couple of these
because I think they're
a little bit interesting.
They're all quite short
and I'll keep it simple
because I know
code on the internet is hard
but just to kind of
give you a sense of
like some of the moving parts.
So,
in order to
do any of this stuff,
maybe we should
also think a little bit
about the architecture
is you have a
Wave server
and you have
Wave applications,
right?
You write these
Wave applications
in Python
but the server itself
is like a
Go centralized
host
like MicroWSGI
or G Unicorn
or something
but for Wave,
right?
Yeah, exactly.
So basically,
as you have said
that there are two parts
Wave server
and Wave application.
Wave server is written
in Golang
and it provides
one of the
highlight features
of Wave
and that is
seamless integration
with the OpenID Connect
which is
authentication
protocol
because most of
your enterprise
applications
need to be secured
somehow,
right?
And as a data scientist,
you just don't want to
and cannot do that
yourself
because it's
security-wise
tricky,
but they...
Yeah, sure.
And even if you did,
a lot of the
OAuth flow
requires you setting up
certain endpoints
and it's tricky.
Yeah, exactly.
It's tricky
even for regular
or for engineers.
So,
that's why
we provide this feature
out of the box
and it's provided
by Wave server
which
our Wave app
which is
a Python server
connects to
and talks to
browser
through
as a proxy,
let's say.
So,
every...
all the data
goes from
Python application
to Wave server
and then
Wave server
keeps
an open
WebSocket connection
with browser
to perform
real-time.
Okay.
So,
to get started,
start the Wave server,
create a virtual
environment,
pip install
H2O-Wave
and then
that's it.
You just have that
one dependency.
I guess you might
have to pip install
H2O-Wave
before you can
start the server
if you haven't
got it
globally available
but then you
just have to
write a little bit
of code.
Now,
there's interesting
paradigms that
you've chosen
here.
A lot of the
web frameworks
are stateless,
right?
Here's an endpoint
and the only thing
this endpoint knows
about anything
is that
here's the request
coming in,
maybe a cookie
is passed,
maybe a query
string is passed
or a form
but other
than that
it's separate,
unknown,
unrelated,
no history
and with these
apps it's a little
bit more like
a single running
script that
has a bit of
a memory,
right?
So basically
a wave
has two concepts
let's say
one is
a wave script
the other one
is a wave app
and the difference
is that
wave script
is as the name
suggests a script
so you write
a Python
code
you involve
with like
let's say
python
however
wrote that
pi
not like
you would do
with the normal
regular Python script
and what
that does
is it
converts
your
Python
script
wave data
into a
JSON
sends it to
wave server
and keeps it
there
so that means
that your
wave
your Python
process
is finished
and you only
serve your
data from
wave server
to users
which is
much more
performant
than if you
had to
rerun the
script for
every single
user as you
would normally
do
and another
concept is
a wave app
which is
something that
most
our users
use
and wave app
lets you
add interactivity
because with
wave script
more suited
for
dashboards
which are
just
static
read only
web apps
let's say
and you can
even update
it
as you wish
but with
wave application
you probably
want to
handle your
button
clicks
or drop
down
changes
and
all this
needs to
be
recorded
back on
python
server
right
yeah you're
going to
trigger
elements of
the page
changing
and things
of that
sort
so one
thing that's
interesting here
is you create
a site
by giving it
an endpoint
like slash
hello
and you can
have multiple
ones of these
running on
the wave
server
right these
multiple scripts
or multiple
apps
and then you
start working
with these
widgets
and these
widgets can be
composable and
hierarchical and
they feel a little
bit like almost
like working with
flutter
right you have
these UI
elements and
you might have
like a layout
which has a
grid and
into the grid
you might put
a table and
into the table
you might put
cards right
you kind of
build this up
in code
mostly you
can use
HTML and
other
templating
languages but
mostly you write
it in code by
first this example
you have here you
just say I'm
going to create
a UI dot
markdown card
right
yes so
basically the
basic building
a block
be it the
script or
apps is
something called
card so
if you want
in the example
in front of us
you have
specified UI
dot markdown
card which is
as the name
suggests a card
that lets you
display markdown
and interpret it
and that's about
it you put your
cards into the
layout and that's
it yeah you also
have the idea of
basically a grid
layout where you
can position
these cards to
be in a certain
offset in a
certain size
right so in
your hello world
example you have
the position is
box one one
two two which
means the top
left and then
too wide too
tall yes exactly
so the box
one one two two
means cone one
row one and
width two and
height two we
also support
another type of
layout and that
responsive way
else for more
advanced users
this grid layout
is more like the
simplest layout
that we could
write but it
it's fixed it
means that it may
not work well
on every single
stream but if
you want if
you want the
more responsiveness
then definitely go
for responsive
layout which is
based on flexbox
right so maybe
it's five wide if
you got a big
screen but if
it's on a phone
they just all go
vertical exactly
okay and let's
see what else do I
want to call it
here all right I
think that one's
that one's pretty
good you also have
this idea of
editing your page
from the repl so
after you've run
that you can then
just fire up python
and start working
with it again how
does that work
it's mostly just
for playing around
maybe debugging
yeah maybe debugging
but I don't think
that people will
develop that way
it's just to show
people it's really
nothing but python
and no hidden
content nothing like
that you can
basically hit up
your repo and
work from there as
well if you want
yeah but what's
surprising to me is
you can exit your
python script and
then you can open
the repl import the
code and then make
some calls to it
and it actually
changes the running
code that I see
right yeah
basically the magic
behind that if you
will notice we have
that page that
save function which
basically what it
does is make a
diff or what has
changed from your
previous save and
send it over to the
web server and
web server then
deals with that and
displays whatever
changes you have
in it so since
this is a static
file effectively
it's just there's
a singleton copy
on the server that
everybody's requesting
exactly that's why
where it's suitable
for dashboards
sure so another
thing that jumps
out is you make
this change and
then people who
have the browser
open to that page
it just changes
they don't have to
reload right it
has built-in kind
of smart hot
reload tell us
about that
exactly so this
is one of the
things that I
think that
may be appealing
even to let's
say regular
software engineers
because the
problem with
software engineers
is like if you
present them with
framework like this
they want to have
more control
right we are
software developers
we need to have
control over
everything that's
why we don't like
let's say
WordPress
that's a great
undoing
the shiny thing
and we have to
create it ourselves
yeah exactly
but the problem
with let's say
the typical approach
to building web
application today
which is a single
page applications
is that all the
initial triggers
want to be
done from
client side
from the browser
but if you want
to reflect changes
that happened on
the backend side
then this can be
a bit problematic
you either need
to introduce
polling
which means
calling your
web server
your backend
regularly
but that may
not be ideal
because you can
flood your
server
unnecessarily
I don't know
why we can only
support 20 users
at a time
this doesn't make
any sense
or you can
use web socket
which is
not so easy
to implement
let's say
and what wave
uses is exactly
this web socket
so it allows you
to push changes
from server
to UI
seamlessly
and that's
also one of
the wonderful
features
of wave
right
so basically
the takeaway
for most people
is as you
develop your code
as you develop
your project
your app
you'll have it
maybe open
on the side
in your browser
you make some
changes
if you just
hit save
then it should
automatically
maybe you have
to rerun
your script
but you won't
have to go
and refresh
your browser
as well
right
yes
exactly
even with
the wave
applications
we use
UVcorn
as the underlying
Python server
which has
built in
a hot reload
and that means
that you can
just save
your file
and everything
reload
automatically
cool
so UVcorn
is watching
your Python files
for changes
so when you save
it automatically
restarts it
you don't even
have to do that
exactly
if they restart
it
and also
the browser
is refreshed
yep
okay
fantastic
so that's a
pretty cool
little hello world
the next one
is to get
the browser
to sing
99 bottles
of beer
on the wall
this is a fun
little demo
but this one
takes us
from
oh this one
is still
a script
so far
right
and then
the next one
will convert
it to an app
okay
so for this one
the core
takeaway here
is basically
a way
to introduce
like pushing
updates from the
server to the
client
so for example
you know
people don't know
there's the
99 bottles of beer
in the wall
99 bottles of beer
take one down
pass it around
now there's 98
then 97
then 96
right
so you wanted
to have it
like keep doing
that over
and over
so if this
was a console
app
how would I
do it
I would probably
say 4i
in range
and just
for 99
and then 90
and I would
just print
print
what you
can do
with wave
is you
can have
that exact
same
super
straightforward
for loop
and then
you just
go to your
card that
you put in
the page
and you
just say
content
equals some
f string
right
that verse
for that
number
and then
you just
call page
and then
you don't
want it
to happen
as fast
as possible
as you
sleep
right
make it
come out
a little
bit slower
but
that does
the
multi
cast
broadcast
to all
the clients
watching
just straight
away
right
just loop
over the
code
make some
changes
and that
will
automatically
push it
I guess
you got a
call to you
but then it'll
push it
that's pretty
impressive
yeah
and although
by the way
just not to
forget
the original
author of this
framework
you're not me
but it's my
boss
pretty probable
which I would like
to give shout out to
because he's the
mastermind behind
all this framework
yeah cool
it's definitely
a cool framework
so this opens up
a lot of
possibilities
for people
coming to
your site
and getting
some form
of interactivity
now
one thing
he said
is like
I could
build
say like
a chat
app
or
like
some
kind
of
bot
and
what
I've
seen
so far
it feels
like
what is
happening
on the
server
is
shared
with
everyone
rather than
dedicated
to a
particular
user
or
group
of
users
how do
I
combine
this
to say
like
I want
them to
sing
this song
but I
want
everyone
maybe
who logs
in to
have their
own
copy
right
like
Sarah
came
30 seconds
later
she
shouldn't
join
the
song
halfway
through
or
a
third
of
the
way
through
she
should
get it
from
99
going
down
yeah
that's
definitely
possible
the reason
that you
see
for
every
single
dead
the
same
output
is
because
we
are
only
looking
at
the
scripts
which
in
case
of
dashboards
that's
totally
understandable
right
everybody
should
see
the
same
dashboard
because
the
data
is
always
the
same
but
with
wave
apps
you
get
basically
the
common
behavior
as you
will
suggest
so
every
tab
can have
its own
thing
session
basically
exactly
so
if
you
have
a
counter
app
that
has
a
single
button
and
once
you
click it
then
it
increments
counter
you
can
basically
have
a
single
button
instance
for
every
single
tab
if you
want
to
but
we
also
have
something
called
multicast
and
broadcast
mode
and
that
means
that
the value
could be
synced
across
every
single
tab
if
you
wanted
to
but
the
default
mode
is
called
unicast
and
that
means
that
the
change
is
only
propagated
to
the
current
client
which
is
I see
okay
yeah
that
makes
a lot
of
sense
this
portion
of
talk
Python
is
brought
to
you
by
Sentry
how
would
you
like
to
remove
a
little
stress
from
your
life
do
you
worry
that
users
may
be
encountering
errors
slowdowns
or crashes
with your
app
right now
would you
even
know it
until
they
sent
you
that
support
email
how
much
better
would
it
be
to
have
the
error
or
performance
details
immediately
sent
to
you
including
the
call
stack
and values
of
local
variables
and
the
active
user
recorded
in
the
report
with
Sentry
this
is
not
only
possible
it's
simple
in
fact
we
use
Sentry
on
all
the
talk
Python
web
properties
we've
actually
fixed
a bug
triggered
by
a
user
and
had
the
upgrade
ready
to
roll
out
as
we
got
the
support
email
that
was
a
great
email
to
write
back
hey
we
already
saw
your
error
and
have
already
rolled
out
the
fix
imagine
their
surprise
and
delight
your
users
create
your
Sentry
account
at
talkpython.fm
slash
Sentry
and if
you
sign
up
with
the
code
talk
Python
all
one
word
it's
good
for
two
free
months
of
Sentry's
business
plan
which
will
give
you
up
to
20
times
as
many
monthly
events
as
well
as
other
features
create
better
software
delight
your
users
and
support
the
podcast
visit
talkpython.fm
slash
Sentry
and use
the
coupon
code
talk
Python
maybe
this is a
good
time
to
pause
going
through
some
of
these
code
examples
and
some
of
these
capabilities
Bob
Vani
has a
good
question
what
databases
are
supported
not
necessarily
even
just
databases
but
where
does
this
code
run
is
this
PyScript
and
PyIodide
is
this
on
the
server
what
capabilities
do I
have
can I
pip install
whatever
I want
or am I
limited
basically
there are
the limit
you know
because
all the
code
is running
in
server
so
that
means
that
you
can
basically
connect
to
any
database
of
your
choice
the
same
way
as
you
will
do
let's
say
in
Django
or
Flask
app
and
so
basically
you
can
ppnf
out
anything
you
want
on
your
server
I see
so if
it's
supported
with
Python
or
in
some
crazy
indirect
way
that
you
might
write
some
c
you
can
call
from
Python
you
can
call
it
it's
going
to
be
like
it's
full
Python
so
it
does
whatever
you
want
it
to
do
exactly
whatever
you
can
make
Python
to do
then
it's
possible
in
wave
as well
sure
that's
really
good
to know
all right
so I
guess
maybe
the
third
thing
that
really
is
let's
talk
about
two
things
real
quick
before
I
get
to
the
third
one
here
one
thing
that's
kind
of
interesting
is
what
you're
setting
here
in
this
example
is
in
the
for
loop
you're
saying
the
content
is
this
f
string
and
you
regenerate
the
entire
f
string
and
for
this
example
it's
like
a
tiny
little
it's
a
verse
in
a
song
and
who
cares
but
you
know
if
this
was
a
much
more
interesting
like
a
full
on
Jinja
style
template
and
you
want
to
change
one
little
small
piece
round
tripping
that
full
HTML
every
time
is
not
the
most
efficient
so
what
you
have
because
you're
doing
web
sockets
is
you
have
this
idea
of
an
expression
to
send
some
values
over
so you
pass
a
dictionary
of
the
values
and
then
you
set
the
content
to
be
an
expression
a
little
handlebar
thing
like
JavaScript
front
and
binding
or
a
Jinja
value
something
along
those
lines
right
tell us
about
this
and
how
that
works
yeah
so
basically
it
works
basically
what
do
you
always
send
just
the
difference
you know
the tips
or let's
say
deltas
what has
changed
to the
UI
and once
these
changes
are
arrived
to the
browser
then
a
react
takes
over
it
and
renders
whatever
changes
have
come
right
so
in
this
particular
case
the
first
change
would
be
the
whole
string
because
there
is
nothing
else
there
it
would
be
rendered
but
all
the
subsequent
updates
will
only
contain
changes
in the
form
of
dictionary
values
which is
much
less
to
care
about
on
the
network
bandwidth
type
and
once
these
values
arrive
then
react
again
takes
over
and
does
it
magic
and
updates
the
UI
correctly
yeah
that's
really
neat
so
really
great
way
to be
super
efficient
just by
setting
some
values
like
on
your
card
data
dot
whatever
you want
to call
it
and
then
call
save
and
those
correspond
over
to
your
expression
right
that
makes up
your
template
yeah
and
that's
even
more
important
in
our
domain
because
data
scientists
usually
have
a lot
of
data
extremely
a lot
of
data
and
that
means
that
they
would
like
to
push
it
all
into
browser
and
render
their
plots
but
if
they
dip
on
every
single
update
then
it
might
not
be
the
best
way
right
so
right
if
you've
got
a
big
page
and
a
tiny
little
plot
that
you
want
to
change
you know
it'd
be
better
to
change
that
plot
but
leave
all
the
other
stuff
there
exactly
cool
let's
talk
the
last
little
thing
here
about
how
this
looks
if
we
make
it
an
actual
an
app
I
think
if
you
need
to
go
to
the
list
okay
maybe
be
counter
that
would
be
simple
I
think
the
bean
counter
one
yeah
the
bean
counter
one
yeah
this
is a
real
simple
one
so
the
bean
counter
one
is
like
a
button
you
press
it
just
goes
one
two
three
four
right
it
shows
things
like
state
though
and
what
not
but
tell
us
how
does
it
look
different
to
create
something
like
in
the
script
I
didn't
do
anything
hardly
about
like
URLs
or
functions
to
call
or
returning
I
just
did
some
stuff
and
then
it
somehow
magically
changed
but
this
looks
a little
bit
more
like
flask
right
yeah
so
the
difference
in
syntax
is that
you
need
to
have
a
single
function
that
is
synchronous
because
we
use
a
single
not
to
block
your
UI
and
that
function
needs
to be
annotated
with
an
app
annotation
that
takes
the
single
required
parameter
which
is
a
URL
pad
that
you
want
your
app
to
be
listened
on
and
within
this
function
can
I
listen
to
forward
slash
like
all
these
examples
are
like
slash
counter
and
slash
hello
and
so
yeah
you
can
also
root
which
will
be
just
the
forward
slash
and
that's
it
yeah
okay
and
just
to
get
back
so
the
annotate
function
will
give
you
one
parameter
which
is
Q
and
that
stands
for
query
and
that
allows
you
to
control
your
wave
up
so
it
has
methods
like
Q
that
save
or
Q
page
save
I
would
say
yeah
Q
page
save
which
is
an
equivalent
of
page
save
in our
previous
script
example
you
also
instead of
page
dictionary
that you
put your
cards in
you
need
to
just
prefix
it
with
Q
so
you
end
up
with
Q
page
and
then
you
specify
your
current
and
this
is
how
you
get
the
per
user
type
of
thing
because
that
queue
is
probably
tied
to
them
right
not
necessarily
the
per
user
thing
is
by
default
but
if
you
go
to
the
app
annotation
you
can
specify
mode
there
so
by
default
and
that's
how
it
distributes
the
changes
the
queue
is
more
like
you
can
think
of
it
as
a
source
of
what
has
changed
and
how
to
update
your
UI
so
when
we
go
through
the
example
you
will
see
that
it
can
also
store
some
local
pay
or
advice
pay
etc
okay
one of
the
things
that
really
jumped
out
to
me
was
seeing
the
async
and
await
stuff
everywhere
so
you
have
an
async
method
you
call
await
page
dot
save
and
presumably
if you
want to
work
with
beanie
and
mongodb
you
could
use
its
async
api
if you
want to
call
an
api
endpoint
with
httpx
you
could
await
those
calls
right
so
it
really
allows
you
to
create
scalable
code
right
yeah
definitely
and
especially
the
reason
why
async
is
because
if
you
have
the
code
like
you
have
the
single
app
which
is
two
users
and
the
first
user
would
create
some
blocking
action
then
it
would
block
it
also
the
second
user
because
server
is
busy
right
it
cannot
respond
so
that's
why
you
need
to
make
everything
asynchromous
and
you're
and you're
you're
you said
you're
using
uveacorn
behind
the
scenes
so
that's
a
great server
for
this
kind
of
code
yes
exactly
yeah
in
that's
a lot
of
heavy lifting
for us
yeah
absolutely
it's
really good
to build
on it
is it
running
some kind
of python
framework
that we
don't see
like a
flask
or fast
API
or something
or is it
just all
custom
it uses
starlight
although
I'm not
sure if it
the actual
server
because
I'm not
very familiar
with it
yeah
so
starlight
is the
same
foundation
as
fast
API
and other
things
as well
so
that's
cool
all right
well there's a cool
getting started
people can walk
through and check
it out
it's pretty
interesting
because it's a
it is a
different
programming
model
compared to
how
many people
would be
familiar
with
flask
and
those types
of things
that are
very
stateless
and you've
got to
somehow
figure out
how to
get their
session
and then
store
then a
database
or a
redis
queue
and then
get that
back
and then
you know
regenerate
it right
it's
you have
this
inner
information
more
round tripped
I think
it'll resonate
with a lot
of people
it's definitely
easier
so I want
to talk
about
the widgets
but actually
before we
talk about
the widgets
let's touch
on one
thing over
in the
examples
here
templates
so
when I
write
traditional
web
applications
let's
call them
I'll
create an
HTML
file
and I'll
probably use
some template
language
like
chameleon
or
Django
templates
and pass
a dictionary
over there
but I
mostly think
about what's
on the
page
by
structuring
an
HTML
file
that has
CSS
and
JavaScript
and
placeholders
for my
things to go
into
and loops
and that
sort of
thing
is there
a way
in
HTML
wave
to have
some
template
like
that
definitely
although
we
do
not
encourage
it
very
much
because
we
usually
tend to
think
about
using
your
custom
HTML
as
escape
page
and
instead
we try
to provide
you with
Python
APIs
whenever
possible
but if
you really
really want
there is
also
HTML
templating
if you
need
and
that
also
work
the
same
way
as
we
described
the
script
data
update
so
it
takes
one
dictionary
with
the
values
and
then
HTML
with
the
templating
language
right
does it
do the
partial
updates
based on
that as
well
or does
it
round trip
the
template
the
whole
thing
I'm
not
sure
about
that
one
but
I
would
say
it
also
is
capable
of
partial
updates
okay
so
basically
the
examples
that
you
have
here
are
you
have
a
little
tiny
fragment
like
a
fragment
of
HTML
that'll
go
into
the
page
and
then
that's
the
template
sounds
a little
bit like
view
components
and
that
style
yeah
and
maybe
one more
the
markdown
a little
bit
together
yeah
exactly
and
maybe
one more
interesting
thing
to note
because
the
app
that
we
are
currently
looking at
is
called
H2L
Lave
Tour
and
that
also
wave
app
in
itself
so
you
can
see
it
looks
nice
even
though
you
have
a
small
screen
and
it's
a
perfect
example
of what
wave
is
capable
because
all the
code
that we
see
in front
of us
is
rendered
in
VS Code
Editor
we use
called
Monaco
Editor
and
that
implemented
via
incorporating
custom
JavaScript
into
wave
so
that
means
if
you
really
need
to
include
some
third-party
libraries
in
JavaScript
then we
got you
covered as
well
that's
really
awesome
yeah
so
this
H2O
wave
tour
lets you
run the
code
locally
and
explore
it
and
search
through
the
different
examples
which
is
really
fantastic
so
if
you
go
to
the
website
there's
a
getting
started
that
shows
you
how
to
get
this
up
and
running
what
we
get
is
a
nav
bar
across
the
top
and
then
like
a
drop
down
combo
box
and
a
next
previous
button
on
the
right
side
of
the
page
we
have
the
rendered
output
that's
live
and
then
on
the
left
side
we
have
the
code
that
makes
it
happen
so
what
you're
telling
me
is
that
little
square
on
the
left
pane
of
my
two
pane
window
that's
basically
VS
code
yes
you can
edit
it
you have
open
one
if you
can
try
to
type
into
it
hit
W
and
let's
say
button
or
maybe
not
maybe
I
remember
it
wrongly
maybe
my
ad
blockers
make
it
angry
as
well
you
never
know
okay
but
yeah
that's
cool
yeah
you get
like
highlighting
and
indentations
and
yeah
you can
edit it
and your
changes
should be
reflected
on the
right
side
as well
yeah
kind of
instructive
yeah
you can
just
set
there
and
edit
that's
a
really
cool
way
to
play
with
it
right
you
know
you
have
stuff
that'll
say
take
you
to
repl
or
whatever
and
there's
all
these
pains
like
okay
what
do
I
click
to
actually
make
this
show up
and
where
is
it
supposed
to
go
this
is
this
is
a
really
cool
way
to
explore
I
think
yeah
okay
so
the
thing
I
wanted
to
talk
about
was
these
templates
so
there
is
some
way
to
do
little
bits
but
it
sounds
to me
more
like
it's
a little
bit
this
component
model
like
this
little
section
this
card
that
we're
going
to
put
somewhere
on
the
screen
here's
its
little
fragment
of
HTML
that
is
an
expression
that
goes
with
it
yeah
very very
neat
the other
one
that's
pretty
nice
is
markdown
right
you have
nice
support
for
just
markdown
out of
the box
so
I
think
that's
great
if you
have
various
there's
hundreds
of examples
and some
people can
go play
there
but
there's
a couple
for the
different
how
markdown
gets
applied
and
used
let's
see
another
thing
you know
you talked
about
you told
me to
type
like
wbutton
and hit
and tab
so
that's
part
of
one
of
the
code
extensions
or plugins
depending
on the
editor
you're
using
so
you have
VS Code
and you
have
PyCharm
plugins
that
allow us
to create
things
like
if I
got a
form
or
something
right
I
could
type
like
wform
tab
and
it
would
go
potentially
create
some
kind
of
UI
element
instead
of
me
having
to
do
that
right
or
if
you
want
to
get
a
scaffold
up
a
starter
application
yes
that's
right
so
we
have
VS Code
extension
and
PyCharm
plugin
which
have
the same
features
and
the
features
are
one
is
called
snippet
or
the
templates
that
allows
you
to
streamline
your
typing
a
little
bit
so
you
don't
need
to
think
about
how
what
are
the
possible
attributes
in
the
button
for
example
you
can
just
yeah
there
is
a
little
demo
so
you
can
just
type
w
underscore
and
your
card
name
and
it
will
basically
give
you
all the
code
that
is
needed
and
the
second
part
is
autocomplete
because
most of
the stuff
in
wave
is
based
on
dictionaries
which
are
dynamic
in
their
nature
so
there
is
not
much
that
the
type
system
can
infer
so
we
help
with
that
a little
bit
as well
yeah
it's
amazing
how much
those
sort
of
focused
templates
are
like
I'm
here
to
create
UI
widgets
I'm
telling
you
this
reminds
me
a lot
of
Flutter
I
don't
know
if
you've
done
anything
with
Flutter
just
a
little
bit
but
the
style
of
the
way
you
create
these
nested
UI
widgets
and
the
editor
tools
to
build
them
it's
really
nice
I like
it
I
certainly
if
people
are
going
to
build
real
apps
with
this
they
should
be
considering
these
extensions
or
plugins
right
yeah
so
Phil
on the
audience
has
an
idea
says
less
intelligent
more
basic
this
might
provide
an
easy
way
to
build
a
personal
media
streaming
service
on my
Raspberry
Pi
and
a
remote
control
interface
to
control
and
view
from
my
phone
what
do
you
think
can
you
build
a
control
go
for
it
cool
I'd
say
it
sounds
pretty
possible
Joe
the
quick
note
that
we
are
really
interested
in
everything
that
our
community
does
so
if
you
have
some
cool
way
up
don't
hesitate
and
bring
it
up
you
can
go
to
GitHub
and
discussions
and
there
we
have
a
discussion
dedicated
to
a
community
showcase
so
yeah
definitely
good
idea
a lot
of
things
I
want
to
ask
you
about
but
we're
going to
run out
of
time
so
let's
talk
about
deployment
so
and
is
this
a
thing
I
have
to
buy
in
order
to
use
H2O
wave
so
suppose
I
have
a
virtual
Linux
server
at
Linode
I
want
to
run
this
there
could
I
do
it
definitely
wave
is
100%
free
of
charge
so
you
can
use
it
even
for
commercial
projects
our
license
permitted
and
you
can
deploy
wherever
we
want
we
even
had
some
blog
posts
about
deploying
wave
apps
on
Heroku
and
we
plan
to
also
add
for
AWS
EC2
or
Linode
or
whatever
and
however
if
you
are
enterprise
then
part of
our
business
model
is
that
we
basically
provide
a
cloud
solution
for
app
deployment
for
you
so
that's
okay
so
if
I
have
like
a
team
of
data
scientists
and
I
don't
want
a
dedicated
H2o
wave
DevOps
person
I
can
just
pay
you
all
some
sort
of
money
and
you'll
set
up
some
number
of
apps
how's
the
pricing
work
there
I'm
not
sure
because
I'm
not
working
on
the
cloud
side
of
things
but
just
to
give
you
maybe
more
just
to
shed
more
light
on
our
initial
intentions
with
wave
we
wanted
to
solve
basically
three
problems
one
was
building
nice
UIs
second
was
authentication
out of
the box
because
this is
painful
and the
third
one
was
deployment
because
if you
are a
data
scientist
you
probably
don't
know
much
about
it
right
so
that
is
where
our
cloud
platform
comes
to play
which
allows
you
to
easily
deploy
your
web apps
using
CLI
it's
basically
like
so
your
business
model
is
basically
H2O wave
is free
open source
people can
deploy it
where they
want
but if
they
don't
want
to
manage
the
running
and
upgrading
and
backups
and all
that
they can
buy that
as a
service
from
you
exactly
yeah
that
sounds
fair
is
it
hard
to set
up
if
I
want
to
host
it
myself
not
really
basically
the
simplest
thing
that
you
need
to
do
is
just
run
hit
wave
run
and then
your
app.py
and that
should
basically
run your
application
you expose
your
correct
ports
and that
I suppose
I could put
it behind
Nginx
successfully
I do
got to do
something special
for like
the web
socket
aspect
of it
I don't
think so
because
I don't
think so
either
because
you just
need to
expose
the
web
server
part
the
web
application
part
doesn't
need to
be
exposed
at all
and since
the
web
server
is
the
one
that
handles
web
sockets
then
it
shouldn't
work
right
I think
it
just
tells
the
browser
hey
we're
upgrading
to
web
sockets
let's
keep
going
and
that
should
go
through
Nginx
I would
guess
okay
that way
like I
could
do
let's
encrypt
over
and all
that
management
stuff
at the
Nginx
level
yes
exactly
yeah
this
sounds
good
the reason
I ask
is I
know
there's a
bunch of
data scientists
who don't
want to do
that
but there's
also
people like
me
who are
mostly
programmers
but have
a business
with a bunch
of dashboards
that might
be cool
to build
and I've
already got
eight servers
and a bunch
of stuff
I could
easily host it
on one of
them
so for me
I could set
it up
and use it
like I'm
asking in a
indirect but more
broad sense
like you know
this is useful
for people
beyond just
the traditional
I want
slightly more
than Jupyter
crowd right
yes exactly
we even
think that it
might be useful
for maybe
people like
you who are
more of a
software engineer
my boss
likes to say
that we would
like to compete
in Django
although our
it's not really
direct competition
let's say
I would say
because
Django
requires you
to know
HTML
and CSS
and JavaScript
whereas we
don't
but
at the
people side
we want to
target also
Python developers
sure
if you're
doing pure
HTML
Django
servers up
you can start
bringing in
designers
and front end
people right
there's like
there's a
different kind
of app
that often
gets built
but
can be built
but
especially
if you're
talking about
businesses
80% of the
apps that they
actually build
are just like
forms over
data
I need to
see what's in
the database
select a
thing
filter thing
click
do something
to it
and that's
the entire
app right
and it
sounds like
these wave
apps might
be a good
fit for
it doesn't
have to
look like
Airbnb
landing page
what it needs
to do is
show me this
stuff and let
people get to
it quick
and select
them and make
some actions
real quickly
right without
spending weeks
to do it
exactly
would it be good
for those
kind of apps
definitely
we also
have
sector stories
related to
that because
we had some
let's say
product people
with some
engineering skills
or with
end skills
they needed
some
let's say
small internal
app that
would allow
them for
example
to bring
people to
give trial
access to
people to
our platform
and this
needed to be
done by
backend developers
before because
there was no
infrastructure
supporting it
so one
of our
product
managers
went ahead
and built
a wave
app that
did exactly
that
listed all
the pending
trial users
and allowed
you to
basically
give them
access
and that's
it right
it's a very
small application
but it will
build in
no time
with tremendous
value
yeah
and you have
all the widgets
you need
you've got
buttons
you can
type in
various things
you can
sort of
build up
this
interaction
right
you've got
dropdowns
and search
and the
make it
happen
type of
buttons
do you have
a grid
yes
it's called
table
if you will
search for it
and I have
one of the
I'll do the
table
search
there you go
yeah
and basically
this is one of
the fundamental
components for
data scientists
right because
you want to
showcase your
data sets
this is like
the perfect
component for it
yeah
even have
little cool
circular
progress bars
which is
those are
really nice
looking widgets
yeah very good
and then I guess
you even have
it wasn't page
it was filtering
but yeah very
very cool
yes we support
search filter
sort
even pagination
if you want
and have
really a lot
of data
yeah
we didn't even
really get a chance
to go through
all the
widgets
but you've
got
most things
I can imagine
you want to
use to build
build an app
you've got
a color picker
you've got
choice groups
like a radio
button
I'm presuming
you've got
images
you've got
file upload
do you have
a video player
not yet
but it should
land soon
because we are
working on
a video
annotator
component
which would
basically be
also usable
as a video
player
okay
so you have
a text
annotator
and this would
be kind of
same thing
and also
an image
annotator
that's on
the ml
side
where you
say
here's the
thing
I'm going
to feed
my model
tell it
that this
is a
person
and that
is a
cat
don't let
it think
the cat
is a
person
or
whatever
right
yes
exactly
okay
yeah
cool
so
you'll
probably
have
the
video
player
as a
building
block
there
right
yes
that
sounds
fun
okay
any
other
widgets
you want
to give
a quick
shout out
to
I said
there
I mean
there's
a whole
host
of
plotting
I guess
also
you can
integrate
with
things
like
Altair
and
plotly
and
matplotlib
you don't
have to
stick
with
just
your
widgets
yes
and
if
anyone
go to
overlay
sections
and we have
things like
dialogue
sidebars
etc
notification
bars
whatever
you can
think of
if
there
is
something
that
you
need
and
it
is
not
there
you
can
always
file
a
feature
request
yep
and
that'll
land
on
your
desk
or
on
your
screen
you'll
think
about
it
perfect
well
it
certainly
looks like
a capable
platform
and
ability
to take
it
and
just
go
run
with
it
and
deploy
it
pretty
excellent
and
if
people
out
there
and
they
don't
want
to
deploy
it
then
you
have
a
business
for
them
business
offering
yes
yeah
very cool
all right
real quickly
because
like I said
we're getting
short on time
two things
let me pull up
the actual
app here
so
you have
themes
right
if
you
it's like
five or six
different ways
in which
your site
can look
and you can
just apply
a theme
or you can
create
custom themes
or if
you want
to go
crazy
you can
actually
include
custom
CSS
right
yes
but
you
probably
most likely
don't want
to do
that
but
if
you
want
to
you
are
free
to
go
okay
yeah
there's
a way
to
create
a
UI
widget
that
is
a
meta
element
where
you
can
say
include
this
JavaScript
either
off
your
server
or
CDN
or CSS
yeah
and also
the other
question
the other thing
I want to touch on
is
JavaScript
support
yes
so
basically
we support
arbitrary
JavaScript
as well
you just include
your script
as if you
did in
let's say
Django
or
whatever
other
server-side
frameworks
you are
good to
go
the
example
should
be
called
inline
script
or
script
if you
whatever
you wish
there we go
how about
this one
yeah so
what's
interesting
is there's
a way
to set
up
in
JavaScript
to push
back
into
the
wave
app
and trigger
that
function
to run
with new
arguments
right
yeah
exactly
so
that's
how you
can
basically
reach
the gap
between
JavaScript
and
Python
you can
send
your data
back to
Python
yeah so
you just
say
in
JavaScript
you just
say
wave.emit
and the
event
and then
you know
arguments
basically
right
exactly
okay
it's always
nice to have
these escape
hatches
you know
like it's
it's 85%
of what I
need I
just need a
little bit
something different
here and if I
could just put
two lines of
JavaScript I
know I could
get there or I
need to style
this just a
little bit
differently
exactly
cool
all right
Martin
well very
cool project
that you're
working on
here
congrats on
getting it
out there
it looks like
it's pretty
popular
people are
definitely
digging it
and also I
love the
command K
stuff that
you have
here
on your
homepage where
you can just
instantly
jump in and
like search
around that
that's pretty
cool
but 3000
GitHub stars
looks like a
cool framework
not exactly a
direct head-to-head
competitor Django
and Flask but
not that far off
either right
not the
end map
let's hold it
one day
give it a year
or two
okay cool
I love it
yeah
all right
now before
you get out
of here
got the
final two
questions for
you if we're
going to write
some code
what editor
do you use
I prefer
VS Code
the wonderful
VIM extension
I cannot live
without it
anymore
however I
do think that
the PyCharm has
much better
language support
I prefer VS Code
because I need to
jump between
multiple languages
cool got it
and I'm sure
that you run
the wave
extension or
plugin
there's all
right
yes of course
of course
and the
notable
PyPI package
something you
find interesting
or you want to
recommend
there are many
of course
but maybe
one that I
would like
to give a
shout out to
is
planerite
and basically
end-to-end
testing
framework
nothing like
Cypress
I found that
it can be
used for much
more than just
end-to-end
testing
we use it
for visual
regression
testing
we use it
for generating
our imagery
into documentation
and I have
even done
a lot of
tests
using that
as well
so it's
pretty versatile
tool
it's like the
new Selenium
sort of
exactly
yeah
I did interview
Andy Knight
three four months
ago about this
playwright is really
neat it's
I had to do
visual testing
or testing
where I kind of
interact with the UI
definitely what I
would pick these
days
yeah
excellent
all right
final call
action
people want to
get started
with wave
what do they do
either go
to our docs
which is wave
that they stole
that AI
or they can
turn on our
GitHub repository
and they will
find their way
there I believe
and maybe
just a quick
note
we are
participating
in Hectoberfest
so if you feel
like you would
like to
contribute to
open source
then you are
more than welcome
nice
okay
I'm sure a lot
people are
familiar with
Hectoberfest
but maybe
some aren't
what's the
story there
so basically
Hectoberfest
is a month
long
celebration
of open
source
and it
encourages
people to
contribute back
open source
and if they
do for
valid pull
request
then they might
be eligible
for swag
or t-shirt
cool
and it is
October
recording on
October 3rd
so awesome
get out there
and be part
of it
that sounds
fun
well
wave sounds
like a really
cool framework
we have so
many choices
and I love
that it takes
advantage of
some of these
modern python
ideas like
async and await
whatever else
you want to
bring into
it
so
very cool
work
thanks for
being on
the show
to share
it with us
thanks for
having me
Michael
yeah you bet
bye
this has been
another episode
of talk
python to
me
thank you
to our
sponsors
be sure to
check out
what they're
offering
it really
helps support
the show
starting a
business is
hard
Microsoft for
startups
founders
hub
provides
all founders
at any
stage with
free resources
and connections
to solve
startup
challenges
apply for
free today
at
talkpython.fm
slash
founders hub
take some
stress out of
your life
get notified
immediately about
errors and
performance issues
in your web
or mobile
applications
with
sentry
just visit
talkpython.fm
slash
sentry
and get
started for
free
and be sure
to use the
promo code
talkpython
all one word
want to level up
your python
we have one of
the largest
catalogs of
python video
courses over
at talkpython
our content
ranges from
true beginners
to deeply
advanced topics
like memory
and async
and best of all
there's not a
subscription in
sight
check it out
for yourself
at
training.talkpython.fm
be sure to
subscribe to
the show
open your
favorite podcast
app and search
for python
we should be
right at the
top
you can also
find the
itunes feed
at slash
itunes
the google
play feed
at slash
play
and the
direct rss
feed at
/rss
on talkpython.fm
we're live
streaming
we're live
if you want to
be part of the
air
be sure to
subscribe to
our youtube
channel at
talkpython.fm
slash youtube
this is your host
michael kennedy
thanks so much
for listening
i really appreciate
it
now get out there
and write some
python code
you
Thank you.