WEBVTT

00:00:00.001 --> 00:00:03.900
If you're doing any sort of data exploration, you've likely heard about Jupyter Notebooks.

00:00:03.900 --> 00:00:08.060
In fact, there are quite a few options for running and hosting your Jupyter Notebooks.

00:00:08.060 --> 00:00:12.520
You may have also heard me rave about PyCharm as an editor. Well, on this episode,

00:00:12.520 --> 00:00:17.200
you'll meet Adam Hood from the Datalore team at JetBrains. That's a new project that tries to

00:00:17.200 --> 00:00:22.420
bring the power of PyCharm to notebooks and more. This is Talk Python To Me, episode 196,

00:00:22.420 --> 00:00:24.960
recorded January 9, 2019.

00:00:24.960 --> 00:00:43.300
Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the ecosystem,

00:00:43.300 --> 00:00:48.380
and the personalities. This is your host, Michael Kennedy. Follow me on Twitter where I'm @mkennedy.

00:00:48.380 --> 00:00:53.740
Keep up with the show and listen to past episodes at talkpython.fm and follow the show on Twitter via

00:00:53.740 --> 00:00:59.900
at talkpython. This episode is sponsored by Linode and brilliant.org. Please check out what they're

00:00:59.900 --> 00:01:04.100
offering during their segments. It really helps support the show. Adam, welcome to Talk Python.

00:01:04.100 --> 00:01:06.740
Let's jump right in. How'd you get into programming?

00:01:06.740 --> 00:01:11.040
How did I get into programming? I guess, well, originally my dad is a programmer,

00:01:11.040 --> 00:01:16.960
so he tried to teach me when I was, I don't remember, 10 or 11. It didn't really take then,

00:01:16.960 --> 00:01:23.580
but then I started taking classes in high school and college. Python, I didn't know anything

00:01:23.580 --> 00:01:28.520
about Python or start learning Python until college. I took a few classes, but even then,

00:01:28.520 --> 00:01:34.340
the bulk of my exposure to Python has been working on this project specifically. Before that,

00:01:34.340 --> 00:01:36.480
it was just a couple of classes that I took.

00:01:36.480 --> 00:01:41.680
Okay. So mostly college experience, you'd say, with getting into programming or like what,

00:01:41.680 --> 00:01:44.640
did you go to college for computer science? What was the start there?

00:01:44.640 --> 00:01:46.540
No, my degree is actually in math.

00:01:46.680 --> 00:01:46.860
Okay.

00:01:46.940 --> 00:01:52.940
I ended up going into programming partly to put off graduate school. And it was, I mean,

00:01:52.940 --> 00:01:58.140
I had taken a number of programming classes and I also worked in a lab for two years and the bulk

00:01:58.140 --> 00:02:02.140
of my work was programming in MATLAB granted, but still programming.

00:02:02.140 --> 00:02:06.320
Yeah. I think that's how a lot of math people get into programming. They start there and they're

00:02:06.320 --> 00:02:10.380
like, yeah, this is kind of crummy. What can I do other than this? What can I do other than MATLAB?

00:02:10.380 --> 00:02:11.620
There you go.

00:02:11.620 --> 00:02:18.800
Yeah. That's actually a real similar to my story. Actually, I started in math and got into programming.

00:02:18.800 --> 00:02:24.180
And I spent some time writing MATLAB stuff as well, but bailed on it as soon as I could,

00:02:24.180 --> 00:02:24.580
basically.

00:02:24.580 --> 00:02:24.940
Right.

00:02:25.180 --> 00:02:30.420
Nice. So when you joined the Datalore team or the team that's working on the project that became

00:02:30.420 --> 00:02:33.000
Datalore, that's more or less when you got into Python.

00:02:33.000 --> 00:02:41.060
I guess it was at first we weren't really working on a Python editor. So it was probably another year

00:02:41.060 --> 00:02:43.080
or so before I actually got into Python.

00:02:43.080 --> 00:02:46.860
Right. So you got to build the foundation of all the tooling and whatnot.

00:02:46.860 --> 00:02:47.240
Right.

00:02:47.240 --> 00:02:48.520
Before it matters. Yeah.

00:02:48.520 --> 00:02:52.400
Working on this project, that's when I really started getting into Python, especially when I started,

00:02:53.060 --> 00:02:58.360
I've went to a couple of conferences. I've demoed the tool a fair amount. So I've

00:02:58.360 --> 00:03:02.520
certainly had some exposure to at least simple Python from that.

00:03:02.520 --> 00:03:06.060
Yeah, sure. That's cool. So what do you do day to day at JetBrains?

00:03:06.060 --> 00:03:13.500
I'm a developer. I'm working on building features, fixing bugs, and so on. I can say I've worked

00:03:13.500 --> 00:03:18.820
around various different parts of the tool at various points in time. Maybe we could get into that later

00:03:18.820 --> 00:03:21.400
once we talk more about the features that we actually have, I guess.

00:03:21.620 --> 00:03:26.380
Yeah, yeah, sure. Well, let's just start there. Let's set the stage a little bit with what this

00:03:26.920 --> 00:03:32.080
guys have created and you got here. And then we'll maybe take a step back. So what is Datalore?

00:03:32.080 --> 00:03:35.880
Like what else is out there that's comparable or is it something totally new?

00:03:35.880 --> 00:03:41.300
Well, it's a little bit new. Things that are comparable would be Jupyter Notebooks, especially

00:03:41.300 --> 00:03:48.280
if you talk about Google Colaboratory, I guess. It's this computational notebook. In our case,

00:03:48.320 --> 00:03:54.060
it's hosted in the cloud, it's hosted in the cloud, also completely collaborative. You can share with

00:03:54.060 --> 00:04:00.300
coworkers, collaborators, whoever. In my limited experience working with Jupyter and also based on

00:04:00.300 --> 00:04:05.060
talking to a lot of people, I get the impression that a lot of people, they'll use Jupyter, but they'll

00:04:05.060 --> 00:04:11.220
use something else as well sometimes to write the code and then they execute in Jupyter. A lot of people

00:04:11.220 --> 00:04:16.640
have come to our booth at a conference talking about how they use PyCharm and Jupyter together and so on.

00:04:16.640 --> 00:04:22.980
So maybe one idea here is that this is a single unified tool, which kind of takes the ideas from

00:04:22.980 --> 00:04:29.220
Jupyter as the computational notebook, but also from PyCharm as an IDE. Also the collaboration that you

00:04:29.220 --> 00:04:31.700
might find in Google Docs are now in Collaboratory.

00:04:31.960 --> 00:04:35.520
Okay. So let's come back to that collaboration stuff because I think that's super interesting,

00:04:35.520 --> 00:04:41.000
but maybe let's just take a step back and just talk about notebooks in general, not the computers

00:04:41.000 --> 00:04:46.760
with keyboards, but, you know, Jupyter and other computational notebook type things. There was a

00:04:46.760 --> 00:04:52.120
recent article and I forget what it was. It was in the Atlantic and it's, I've maybe mentioned it at a

00:04:52.120 --> 00:04:58.540
time or two on the show. And basically the title is that the scientific paper is obsolete. And it's

00:04:58.540 --> 00:05:05.220
really kind of provocative. It has like this picture of like a scientific paper with 15 authors on it.

00:05:05.220 --> 00:05:11.240
And it's literally on fire, right? Like it's crazy. And it's actually a super interesting look into the

00:05:11.240 --> 00:05:19.700
history of where notebooks came from. And it looks a little bit at Mathematica and Wolfram and why that

00:05:19.700 --> 00:05:25.160
really didn't take off in the scientific space in the same way. You know how a Jupyter and things like

00:05:25.160 --> 00:05:32.020
DataLore and Google Colaboratory and whatnot are really redefining what it means for really to

00:05:32.020 --> 00:05:36.760
present like computational work, like science, you know, hard science type stuff. Let me get your take

00:05:36.760 --> 00:05:40.840
on that. What do you think about this positioning that like notebooks are the new scientific paper

00:05:40.840 --> 00:05:45.680
for data science or for, you know, real science, like hard science, you know, chemistry, whatever.

00:05:45.680 --> 00:05:49.060
Oh, it might take some doing to convince all the journals of that.

00:05:49.820 --> 00:05:58.260
To be fair, they have a very strong financial vested interest in keeping their position. I think there's

00:05:58.260 --> 00:06:03.860
actually something a little bit fairly wrong about these whole scientific journals because,

00:06:03.860 --> 00:06:11.700
you know, so much of this research is funded by taxpayers and then is published in these private,

00:06:11.700 --> 00:06:16.440
ultra expensive journals. Like, isn't that our research? Didn't we pay for that? So that's a whole

00:06:16.440 --> 00:06:20.360
other angle, right? We mean, we shouldn't go down that too far, but there's also a lot of politics

00:06:20.360 --> 00:06:26.600
involved in my experience, at least from what I've seen. But if we go come back to the idea of the

00:06:26.600 --> 00:06:31.960
notebooks, I mean, I remember seeing Mathematica for the first time and I thought it was a really awesome

00:06:31.960 --> 00:06:38.440
tool. Just and it's exactly like as pretty much what you were saying about the article, it was pretty

00:06:38.440 --> 00:06:44.040
much exactly that. Everything that you have in the article, like you have this idea that you can have

00:06:44.040 --> 00:06:52.280
the code and these nice visualizations or outputs, you can print out the mathematical formula and so on,

00:06:52.280 --> 00:06:57.640
all just coming together in one thing. That was really, I thought that was really awesome when I

00:06:57.640 --> 00:07:03.540
first was introduced to it. And yeah, in a lot of ways you can start to, I don't know if I want to say

00:07:03.540 --> 00:07:09.380
replace papers because that's hard to do, but you do get to see the scientific process

00:07:09.380 --> 00:07:12.800
when you look at a nice, well-organized notebook.

00:07:12.800 --> 00:07:17.520
I mean, that does assume that it is put together for presentation, right? I mean,

00:07:17.520 --> 00:07:21.920
you've probably seen a ton of notebooks that are just like the equivalent of spaghetti code,

00:07:21.920 --> 00:07:25.580
just scrambled all through there. And you're like, what is this thing? And that doesn't actually help,

00:07:25.580 --> 00:07:29.840
but like, at least it's the canvas upon which that could be built, right?

00:07:29.940 --> 00:07:36.080
Right, exactly. And I think there's nothing wrong with this spaghetti code type notebook in the sense that,

00:07:36.080 --> 00:07:40.020
you know, the first stage you have to do a lot of exploration or you're not going to get anywhere.

00:07:40.020 --> 00:07:44.060
And it's not until you have to present it that you need to really think about it.

00:07:44.060 --> 00:07:49.820
Yeah. So I agree that you look at the way people work with the notebooks and after people who don't,

00:07:49.820 --> 00:07:55.040
you know, say like web developers that work in something like PyCharm or Visual Studio Code,

00:07:55.040 --> 00:08:00.460
like this, that sort of iterative exploratory type of working with your tool.

00:08:00.460 --> 00:08:04.980
You don't get that in these other tools, really. Not in the same way, right?

00:08:04.980 --> 00:08:09.700
You've got to rerun them all from scratch. You can't just like, let me tweak this formula and rerun that cell

00:08:09.700 --> 00:08:14.520
and see how that looks. Right? So I definitely think there's this interesting way of working

00:08:14.520 --> 00:08:21.340
in this exploring data with notebooks. Yeah. Let's dig into data lore.

00:08:21.340 --> 00:08:21.700
Sure.

00:08:21.700 --> 00:08:27.360
Tell people what it is. Like, how do you guys, if you're at a conference, you know, be at PyCon or whatever,

00:08:27.360 --> 00:08:30.560
and someone comes up and says, data lore, what's that? What do you tell them?

00:08:30.560 --> 00:08:33.460
I've had a lot of different lines throughout the years, actually.

00:08:34.240 --> 00:08:37.960
It's an online computational notebook in Python.

00:08:37.960 --> 00:08:43.540
To me, it kind of looks like something that is really familiar to people that use Jupyter,

00:08:43.540 --> 00:08:47.280
but has a lot of the features of, say, PyCharm.

00:08:47.280 --> 00:08:49.720
That's definitely one of the ideas. Yeah.

00:08:49.720 --> 00:08:55.360
A lot of the code smarts around understanding the code, suggesting fixes and improvements and whatnot,

00:08:55.360 --> 00:08:59.260
like PyCharm does, but in notebook form, right?

00:08:59.460 --> 00:09:04.720
Yes. And I mean, that's always been one of the big trademarks of the whole company,

00:09:04.720 --> 00:09:09.180
this idea of understanding the code, helping you with your code. So it would be

00:09:09.180 --> 00:09:12.520
kind of remiss on our part if we didn't include that.

00:09:12.520 --> 00:09:15.360
Yeah. It definitely would look out of place if it wasn't there, right?

00:09:15.360 --> 00:09:15.580
Yeah.

00:09:15.580 --> 00:09:19.240
You have all these cool, like, code assistant, code intention tools. Like,

00:09:19.240 --> 00:09:23.520
why are they not being brought over here? When you talk about building it,

00:09:23.520 --> 00:09:26.180
who do you imagine your users are?

00:09:26.180 --> 00:09:31.760
I can't really speak to specifics. I would just say, like, the whole realm of data scientists,

00:09:31.760 --> 00:09:37.520
data analysts, anyone who works with data and works with data in Python in particular,

00:09:37.520 --> 00:09:39.460
hopefully could use this tool.

00:09:39.460 --> 00:09:42.440
Sure. Like, pretty similar to the folks that might choose Jupyter?

00:09:42.440 --> 00:09:43.160
Yes.

00:09:43.160 --> 00:09:48.920
Okay. Maybe it's worth doing, like, a compare and contrast between Jupyter and JupyterLab.

00:09:48.920 --> 00:09:54.320
So how are they different? What does Jupyter have that you guys don't? What do you have

00:09:54.320 --> 00:09:57.040
that Jupyter doesn't? Maybe position those two things for us.

00:09:57.040 --> 00:10:01.600
Sure. I guess it's easier for me to talk about what we have that Jupyter doesn't.

00:10:01.600 --> 00:10:01.860
Sure.

00:10:01.860 --> 00:10:06.580
Not that I want to say Jupyter is awful. I mean, obviously, Jupyter is doing a great job of filling

00:10:06.580 --> 00:10:13.960
the space right now. One of the big differences is the way that we work with the environment that

00:10:13.960 --> 00:10:20.300
you have. In Jupyter, you have this one global environment. You execute the code in some cell,

00:10:20.440 --> 00:10:22.360
and it executes on top of that environment.

00:10:22.360 --> 00:10:27.460
So, like, basically, if I declare, like, a variable in a cell, it's just global to all the other cells,

00:10:27.460 --> 00:10:29.400
and it's that kind of thing?

00:10:29.400 --> 00:10:33.180
At least that's my understanding of Jupyter up to this point.

00:10:33.180 --> 00:10:33.380
Okay.

00:10:33.380 --> 00:10:38.160
Data lore is a bit different. You can almost think of it as after every cell,

00:10:38.160 --> 00:10:43.640
you have a different environment. So you have whatever you write into the first cell,

00:10:43.720 --> 00:10:49.960
you execute that, or by default, it executes automatically, and you have that environment.

00:10:49.960 --> 00:10:55.040
But then you start adding to another cell. That'll execute on top of the environment from the previous

00:10:55.040 --> 00:11:01.880
cell. Basically, the idea here is that, at least for me working with Jupyter, one thing that gets

00:11:01.880 --> 00:11:07.220
confusing is if I start having to re-execute previous cells, the environment gets a little bit

00:11:07.220 --> 00:11:12.420
confusing for me to keep track of just because, you know, I see this sequential code,

00:11:12.420 --> 00:11:15.600
but that doesn't represent what we actually have in the environment.

00:11:15.600 --> 00:11:21.060
Right. Like, maybe there's 10 cells, and you went back and you fiddled with number three and re-ran it,

00:11:21.060 --> 00:11:24.700
but you didn't run four, which would have actually taken the output of three to make a difference.

00:11:24.700 --> 00:11:25.960
You know, like that kind of thing, right?

00:11:25.960 --> 00:11:30.100
Right. And for us, that's not the reality. For us, like,

00:11:30.540 --> 00:11:34.440
if you go back and fiddle with three, you don't necessarily have to execute four,

00:11:34.440 --> 00:11:40.760
five, and six right away. But if you do, that will, they will reflect what you had from three.

00:11:40.760 --> 00:11:41.140
Okay.

00:11:41.140 --> 00:11:45.800
So I guess that's one pretty big difference. I touched on it already, but we have

00:11:45.800 --> 00:11:51.180
two different computation modes. By default, we have basically live computation. Like,

00:11:51.180 --> 00:11:53.640
as you write the code, we're executing it.

00:11:53.640 --> 00:11:56.360
Even before you say execute cell, like, just like if you write,

00:11:56.360 --> 00:11:59.680
as you type lines out, it just, if it's valid syntax, it runs?

00:11:59.800 --> 00:12:00.500
Yeah, pretty much.

00:12:00.500 --> 00:12:00.880
Okay.

00:12:00.880 --> 00:12:05.140
It's useful if you're doing lightweight stuff. The idea is, like, you're getting the feedback

00:12:05.140 --> 00:12:10.120
right away. If you write something and you try to reference a variable that doesn't exist or

00:12:10.120 --> 00:12:15.900
something, you know that right there. Of course, if you have something that's really long running,

00:12:15.900 --> 00:12:23.400
you might not want to run it a million times, but we do have a more Jupyter-like computation mode

00:12:23.400 --> 00:12:27.540
where you actually execute the cell. So I would say that's another kind of key difference.

00:12:27.920 --> 00:12:33.180
Yeah. Probably the other one, I guess you might say, it's like, it's in the cloud, period, right?

00:12:33.180 --> 00:12:34.680
It's in the cloud. Yes.

00:12:34.680 --> 00:12:37.260
You can't just locally pip install Datalore.

00:12:37.260 --> 00:12:37.960
Nope.

00:12:37.960 --> 00:12:42.980
Datalore notebook sort of thing. So for both what the good and bad that comes with that,

00:12:42.980 --> 00:12:45.340
right? But it's definitely a difference between the two.

00:12:45.460 --> 00:12:50.860
Yeah. It's in the cloud. Some of the things that come with being in the cloud is, like, for one thing,

00:12:50.860 --> 00:12:52.320
it's collaborative.

00:12:52.320 --> 00:12:52.900
Right.

00:12:53.100 --> 00:13:00.960
A lot like a Google Docs. I mean, you can share with coworkers, whoever, that you can have them just view it,

00:13:00.960 --> 00:13:03.440
or they could also edit your workbooks.

00:13:03.440 --> 00:13:10.000
On the collaborative bit, that sounds super interesting. And it's really cool. I think this is actually a trend

00:13:10.000 --> 00:13:16.640
in a decent amount of the tooling to have this sort of collaborative live coding, right?

00:13:16.780 --> 00:13:24.360
I know there's been so many folks who've done all sorts of tricks to get some sort of, like, real-time collaboration,

00:13:24.360 --> 00:13:28.600
even so much as, like, going to Amazon, spinning up a virtual machine,

00:13:28.600 --> 00:13:34.720
that you can both log into over remote desktop or something, and actually, like, we're going to both type on this.

00:13:34.720 --> 00:13:36.920
And, like, that's probably not the right way to do it.

00:13:36.920 --> 00:13:39.160
But, like, people were forced to do this, right?

00:13:39.160 --> 00:13:45.180
Because we got Google Docs and cool stuff like that, but PyCharm doesn't do it. The other tooling doesn't do it.

00:13:45.180 --> 00:13:51.440
But, for example, Microsoft announced this with Visual Studio, like, this year, where you can remotely share a session,

00:13:51.440 --> 00:13:56.160
and you can even, like, remotely debug the other person's code on their machine.

00:13:56.160 --> 00:14:02.100
I mean, it's pretty interesting. I think this is, you know, tapping into a trend that is making a lot of sense, yeah.

00:14:02.100 --> 00:14:08.260
Anytime you have a project where you need multiple people to work on it together, you need some sort of tooling for collaboration.

00:14:08.620 --> 00:14:12.900
Alternative has been check it into Git and merge it.

00:14:12.900 --> 00:14:19.640
Yeah. I've only interacted with Git with Jupyter Notebooks once, and it was a painful process.

00:14:19.640 --> 00:14:24.660
I can imagine. Well, and also the exploratory nature doesn't make a lot of sense.

00:14:24.660 --> 00:14:28.080
Like, you're like, oh, I changed a variable, I checked it in, do a pull, right?

00:14:28.080 --> 00:14:31.500
Like, it doesn't, I mean, that's, like, too quick of an iteration, right?

00:14:31.500 --> 00:14:35.300
Like, it's, I added a feature, check it out. That's a different type of thing.

00:14:35.300 --> 00:14:41.400
But Notebooks, like you said, sort of tend to be more iterative and exploratory, and I think that makes a lot of sense.

00:14:41.400 --> 00:14:43.220
What does the collaboration look like?

00:14:43.220 --> 00:14:46.260
So I've played with Datalore, but I haven't played with it with other people.

00:14:46.260 --> 00:14:49.060
So how real time is it?

00:14:49.060 --> 00:14:52.260
You know, is it every word, every character, every cell?

00:14:52.460 --> 00:14:54.740
Pretty much every character that you type.

00:14:54.740 --> 00:14:57.520
You could end up sending several characters at once.

00:14:57.520 --> 00:14:59.360
I don't know exactly how that works.

00:14:59.360 --> 00:15:05.240
But more or less every character, as you type it, it's getting synchronized to your collaborators and so on.

00:15:05.240 --> 00:15:09.300
We have this mode where you can actually follow what your collaborator is doing.

00:15:09.300 --> 00:15:12.680
Like, they have a little avatar in the top right corner.

00:15:12.680 --> 00:15:14.960
If you click on it, you'll start tracking them.

00:15:14.960 --> 00:15:18.060
So as they make edits, you'll see them real time.

00:15:18.060 --> 00:15:18.740
That's pretty awesome.

00:15:18.740 --> 00:15:34.640
Have you seen people do anything or heard of people, like, using this for teaching or, say, like, live presentations where everyone else can, like, come in and, like, I hear we're all sharing the notebook and all the students follow along or the participants follow along?

00:15:34.640 --> 00:15:36.520
It's definitely something that you can do.

00:15:36.520 --> 00:15:39.340
And that I think some people have done that.

00:15:39.680 --> 00:15:42.940
It sounds so much better than slides over WebEx.

00:15:42.940 --> 00:15:43.560
Right.

00:15:43.560 --> 00:15:44.260
You know?

00:15:44.260 --> 00:15:47.480
Like, here, open this in your browser and follow along as we do it.

00:15:47.480 --> 00:15:47.780
Yeah.

00:15:47.780 --> 00:15:52.700
I mean, one thing that was kind of cool was we had this little, like, internal workshop.

00:15:52.700 --> 00:15:58.040
One of our data scientists did a presentation on data science, just, like, some overview stuff.

00:15:58.040 --> 00:15:59.840
And he was doing it in data lore.

00:15:59.840 --> 00:16:09.340
And there is, like, a big difference between just, like, watching what he's doing if he's screen sharing versus just being able to follow him as he moves along.

00:16:09.540 --> 00:16:10.400
And that was really cool.

00:16:10.400 --> 00:16:10.620
Yeah.

00:16:10.620 --> 00:16:11.900
It seems like there's a lot of possibilities.

00:16:11.900 --> 00:16:12.160
Yeah.

00:16:12.160 --> 00:16:12.380
Yeah.

00:16:12.380 --> 00:16:13.060
I think definitely.

00:16:13.060 --> 00:16:13.460
Nice.

00:16:13.460 --> 00:16:19.280
So I guess this puts it kind of in the realm of Google Colaboratory, which I actually haven't used very much.

00:16:19.280 --> 00:16:23.140
I don't know if that has live collaboration, but I'm guessing by the name that it does.

00:16:23.140 --> 00:16:24.200
Yeah.

00:16:24.200 --> 00:16:25.460
I would assume so.

00:16:25.460 --> 00:16:26.960
I haven't used it.

00:16:26.960 --> 00:16:28.180
I have opened it.

00:16:28.180 --> 00:16:37.620
It looks to have just a new format for Google Docs or Sheets or Slides, except it's a notebook instead of one of those things.

00:16:37.620 --> 00:16:39.460
Pretty nice thing to have.

00:16:39.460 --> 00:16:40.060
Yeah, that's cool.

00:16:40.060 --> 00:16:46.080
So I haven't done much with Google Colaboratory, but I haven't heard a ton of people talking about it, but it does seem pretty nice.

00:16:46.080 --> 00:16:46.460
Yeah.

00:16:46.460 --> 00:16:46.760
Cool.

00:16:46.760 --> 00:16:53.840
So maybe we could dig into some of the features that makes data lore cool.

00:16:53.840 --> 00:16:56.680
So there's a few things that caught my attention.

00:16:56.680 --> 00:17:01.580
Maybe I'll bring them up and then you can describe what they are and how they work and why they're cool or whatever.

00:17:02.460 --> 00:17:06.020
So one of them is smart code completion.

00:17:06.020 --> 00:17:09.440
Sort of context-aware code completion.

00:17:10.080 --> 00:17:14.720
I mean, basically all the code completion you have in PyCharm, you also have over data lore, right?

00:17:14.720 --> 00:17:20.860
In some ways, we could have even more because we're aware of everything that's in the environment already.

00:17:20.860 --> 00:17:21.620
But yes.

00:17:21.620 --> 00:17:22.180
Okay.

00:17:22.680 --> 00:17:27.660
It feels like it's more of a real editor when you're working in the cells, to me.

00:17:27.660 --> 00:17:28.700
That's the idea, at least.

00:17:28.700 --> 00:17:29.280
That's the hope.

00:17:29.280 --> 00:17:29.480
Yeah.

00:17:29.600 --> 00:17:40.760
I think one of the cool things, just going between data lore and PyCharm for me, though, was in PyCharm, you're going to get all of the static inspections, completion, everything.

00:17:40.760 --> 00:17:48.460
But you can even get runtime information as you go along and you edit in data lore because it is running as you go along.

00:17:48.460 --> 00:17:49.140
Oh, I see.

00:17:49.140 --> 00:17:52.900
So maybe a field was added to some object at runtime.

00:17:52.900 --> 00:17:57.740
And because it's just hanging out there in the environment, you could get completion on that.

00:17:57.840 --> 00:18:01.700
Whereas in PyCharm, it's got to be static analysis, right?

00:18:01.700 --> 00:18:02.200
That's what you're saying?

00:18:02.200 --> 00:18:02.600
Yeah.

00:18:02.600 --> 00:18:03.600
I think so.

00:18:03.600 --> 00:18:03.980
Yeah, yeah.

00:18:03.980 --> 00:18:04.440
That's pretty awesome.

00:18:04.440 --> 00:18:13.420
So then you have all the code inspection, like this thing has a type annotation that takes a list, but you're passing a string.

00:18:13.420 --> 00:18:14.360
What gives here?

00:18:14.360 --> 00:18:15.160
That kind of stuff, right?

00:18:15.160 --> 00:18:18.540
As far as I know, we're still working on adding a bunch of those inspections.

00:18:18.540 --> 00:18:19.540
So we only have a few.

00:18:19.540 --> 00:18:24.320
I think one example is we have an inspection for unused variables.

00:18:24.580 --> 00:18:29.480
If we see a variable that's just sitting around completely unused, we'll highlight it.

00:18:29.480 --> 00:18:31.500
We probably have a couple of others.

00:18:31.500 --> 00:18:32.760
I don't know all of them.

00:18:32.760 --> 00:18:33.120
Sure.

00:18:33.120 --> 00:18:34.480
Navigation.

00:18:34.480 --> 00:18:42.360
So you can navigate, turn your parts of your notebook into hyperlinks that take you to like where the function is defined or the variable and things like that?

00:18:42.360 --> 00:18:42.860
Yeah, yeah.

00:18:42.860 --> 00:18:43.280
You can.

00:18:43.440 --> 00:18:45.920
I've only used it a few times, but you definitely can do that.

00:18:45.920 --> 00:18:48.300
I don't remember the shortcut even.

00:18:48.300 --> 00:18:54.860
When I'm developing software, that's one of the most useful things that I use.

00:18:54.860 --> 00:18:56.360
Like I always want to see the function.

00:18:56.360 --> 00:18:56.840
Absolutely.

00:18:56.840 --> 00:19:09.360
I mean, that's one of the things that drives me crazy about some of the more basic or, you know, not multifile type of editors that you can't just say, go to definition on this.

00:19:09.500 --> 00:19:13.220
I don't care where it is, go find it and show me what it is.

00:19:13.220 --> 00:19:13.820
You know what I mean?

00:19:13.820 --> 00:19:14.240
Yeah.

00:19:16.480 --> 00:19:19.320
This portion of Talk Python To Me is brought to you by Linode.

00:19:19.320 --> 00:19:23.040
Are you looking for hosting that's fast, simple, and incredibly affordable?

00:19:23.040 --> 00:19:28.160
Well, look past that bookstore and check out Linode at talkpython.fm/Linode.

00:19:28.160 --> 00:19:30.040
That's L-I-N-O-D-E.

00:19:30.040 --> 00:19:34.480
Plans start at just $5 a month for a dedicated server with a gig of RAM.

00:19:34.480 --> 00:19:36.680
They have 10 data centers across the globe.

00:19:36.680 --> 00:19:40.500
So no matter where you are or where your users are, there's a data center for you.

00:19:40.500 --> 00:19:54.920
Whether you want to run a Python web app, host a private Git server, or just a file server, you'll get native SSDs on all the machines, a newly upgraded 200 gigabit network, 24-7 friendly support, even on holidays, and a seven-day money-back guarantee.

00:19:54.920 --> 00:19:56.560
Need a little help with your infrastructure?

00:19:56.560 --> 00:20:01.280
They even offer professional services to help you with architecture, migrations, and more.

00:20:01.280 --> 00:20:04.240
Do you want a dedicated server for free for the next four months?

00:20:04.240 --> 00:20:07.300
Just visit talkpython.fm/Linode.

00:20:09.140 --> 00:20:21.340
The other thing that we can do in terms of navigation is we have a find, basically like Command F or Control F in your browser, except it just searches the code that you have.

00:20:21.340 --> 00:20:22.300
Okay, that's pretty cool.

00:20:22.300 --> 00:20:25.660
You also have this code, or just intentions.

00:20:25.660 --> 00:20:26.720
Tell us about that.

00:20:26.720 --> 00:20:29.160
That looks pretty cool with like data sets and all sorts of things.

00:20:29.160 --> 00:20:29.440
Right.

00:20:29.440 --> 00:20:35.120
There are these context-aware suggestions for actions that you can take with your code.

00:20:35.120 --> 00:20:39.060
By and large, they're trying to focus on the data science workflow.

00:20:39.060 --> 00:20:50.680
Like if you have a completely empty workbook you just started, you can start out by adding some standard imports like pandas, numpy, matplotlib.

00:20:50.680 --> 00:20:53.300
We also have this internal plotting library, I think.

00:20:53.300 --> 00:20:56.600
You can also start by loading a data set.

00:20:56.600 --> 00:21:04.900
You can upload something, or you can work with, we provide like 10 or 12 example data sets or something like that.

00:21:04.900 --> 00:21:08.860
Well, we don't provide all of them, but you can load using this attention.

00:21:08.860 --> 00:21:09.700
You can be loaded.

00:21:09.700 --> 00:21:14.120
So like some of them might go and like suck it off of like a website or something, or off an API.

00:21:14.120 --> 00:21:14.620
Right.

00:21:14.620 --> 00:21:15.480
You can do that.

00:21:15.480 --> 00:21:17.780
We do have this file uploader as well.

00:21:17.780 --> 00:21:21.100
You can upload files from disk, or if you know...

00:21:21.100 --> 00:21:21.240
Sure.

00:21:21.240 --> 00:21:22.500
What format do they have to be in?

00:21:22.500 --> 00:21:24.860
Can you just put whatever and you just read it?

00:21:24.860 --> 00:21:27.980
Or is it like, does it get understood when you upload it?

00:21:27.980 --> 00:21:29.860
You're going to end up reading it in the code.

00:21:29.860 --> 00:21:34.720
So if you know how to read it, like programmatically, pretty much anything.

00:21:34.720 --> 00:21:35.220
I see.

00:21:35.220 --> 00:21:39.460
But it's not like you send it a CSV file and it like pre-parses it for you.

00:21:39.460 --> 00:21:40.680
No, it won't do that.

00:21:40.680 --> 00:21:41.140
Yeah.

00:21:41.140 --> 00:21:41.360
Okay.

00:21:41.360 --> 00:21:47.520
If you do upload a CSV or TSV file, it will get suggested by the intention.

00:21:47.520 --> 00:21:51.700
So you said it has all these different data sources and some data sets.

00:21:51.700 --> 00:21:54.380
Like what are some of the data sets that I could work with?

00:21:54.380 --> 00:21:56.720
Well, we have a number of examples.

00:21:56.720 --> 00:21:58.840
I can even give a full list.

00:21:58.840 --> 00:22:03.460
So a lot of these are like just examples that are used, you know, teaching examples.

00:22:03.460 --> 00:22:07.660
Iris, Boston Housing, Breast Cancer.

00:22:07.660 --> 00:22:10.760
We have two different digits data sets.

00:22:10.760 --> 00:22:11.660
One of them is small.

00:22:11.660 --> 00:22:12.640
One of them is large.

00:22:12.640 --> 00:22:15.320
Like the handwriting, you're trying to recognize handwriting digits.

00:22:15.320 --> 00:22:15.840
Right.

00:22:15.840 --> 00:22:19.200
So that's like an OCR, like machine learning one.

00:22:19.200 --> 00:22:26.460
The Iris one is also like an optical image processing data set that's pretty commonly used, I think.

00:22:26.460 --> 00:22:26.960
Yeah.

00:22:26.960 --> 00:22:27.500
Sounds cool.

00:22:27.500 --> 00:22:34.340
If you wanted to do like demonstrate some form of say machine learning around OCR, you could just go.

00:22:34.340 --> 00:22:37.120
And we're just going to use the well-known data set from here, right?

00:22:37.120 --> 00:22:37.480
Yeah.

00:22:37.480 --> 00:22:37.860
Yeah.

00:22:37.860 --> 00:22:38.900
Are you planning on adding more?

00:22:38.900 --> 00:22:39.580
I'm not sure.

00:22:39.680 --> 00:22:42.480
I think for now we're satisfied with it.

00:22:42.480 --> 00:22:44.900
So basically you have the ability to upload.

00:22:44.900 --> 00:22:46.780
So you just like upload your files.

00:22:46.780 --> 00:22:51.160
I think for the most part, we're not even, we don't even have these uploaded internally.

00:22:51.160 --> 00:22:54.800
It's just, we know how to call the functions that are, that will load these.

00:22:54.800 --> 00:23:00.260
Like with Iris, you can get it directly from scikit-learn and same with a few others.

00:23:00.260 --> 00:23:01.300
That sounds pretty cool.

00:23:02.140 --> 00:23:04.060
What else happens with the intentions?

00:23:04.060 --> 00:23:06.140
So it's not just about data sets, right?

00:23:06.140 --> 00:23:06.500
Right.

00:23:06.500 --> 00:23:07.840
It's not just about data sets.

00:23:07.840 --> 00:23:20.000
So you start out by loading and then after you load the data set, you can, I guess, split it, extract out like X and Y where X is all the, what is it called?

00:23:20.000 --> 00:23:21.820
The feature matrix or something like that.

00:23:21.820 --> 00:23:23.520
And Y is your target.

00:23:24.120 --> 00:23:26.140
We will do the train test split for me.

00:23:26.140 --> 00:23:30.380
I remember when I always screw up the syntax for train test split.

00:23:30.380 --> 00:23:33.060
Like is it X test, X train?

00:23:33.060 --> 00:23:34.580
Or is it X test then Y test?

00:23:34.580 --> 00:23:35.500
Or I don't know.

00:23:35.500 --> 00:23:36.260
But data lore knows?

00:23:36.260 --> 00:23:36.980
Data lore knows.

00:23:36.980 --> 00:23:38.140
So I use the intention.

00:23:38.560 --> 00:23:40.200
It'll split the data for me.

00:23:40.200 --> 00:23:43.120
It'll create some set of models.

00:23:43.120 --> 00:23:49.780
Like it knows how it'll create the object for various scikit-learn estimators.

00:23:49.780 --> 00:23:53.020
It can also do a few pre-processing steps if you need to.

00:23:53.020 --> 00:24:04.400
Like if you loaded Titanic, there's some missing values and some columns that like you have a couple of features that need to be transformed in some way.

00:24:04.400 --> 00:24:10.900
So you can do like a one-hot encoding, you can impute, and there are intentions that will do these things for you.

00:24:10.900 --> 00:24:11.200
Nice.

00:24:11.200 --> 00:24:12.460
So how does that show up?

00:24:12.460 --> 00:24:17.420
Does it show up like you type a word and hit tab and then it gives you like some big expanded thing?

00:24:17.420 --> 00:24:18.960
Or what does it do?

00:24:18.960 --> 00:24:23.780
Actually, they just manifest as buttons at the bottom of the cell.

00:24:23.780 --> 00:24:29.580
Well, we call them blocks, but for the sake of Jupyter users, we can talk about cells.

00:24:29.580 --> 00:24:32.560
There's just all these buttons that you have at the bottom.

00:24:32.960 --> 00:24:36.220
And the buttons that you see exactly will depend on the context.

00:24:36.220 --> 00:24:38.340
Like what variable do you have focused?

00:24:38.340 --> 00:24:43.340
Or it could just depend on the context of like how far along are you in this machine learning process?

00:24:43.340 --> 00:24:44.860
Like what have you done so far?

00:24:44.860 --> 00:24:45.980
What would be the next step?

00:24:45.980 --> 00:24:46.360
Okay.

00:24:46.360 --> 00:24:47.660
You can just click the button.

00:24:47.660 --> 00:24:50.760
You might have a dialogue with some options or it'll just do something.

00:24:50.760 --> 00:24:51.580
And then it'll...

00:24:51.580 --> 00:24:52.380
Yeah, that sounds really cool.

00:24:52.380 --> 00:24:55.420
What machine learning libraries does it support?

00:24:55.420 --> 00:24:56.620
Is it just scikit-learn?

00:24:56.620 --> 00:24:58.340
Is it do like Keras or any others?

00:24:58.340 --> 00:25:00.880
The intention specifically or Datalore as a whole?

00:25:00.880 --> 00:25:01.320
Yeah.

00:25:01.320 --> 00:25:04.480
When it suggests to do like some training, what does it, you know, where does that work with?

00:25:04.480 --> 00:25:07.300
It's going to work by and large with scikit-learn.

00:25:07.300 --> 00:25:07.620
Okay.

00:25:07.620 --> 00:25:12.240
And I mean, it'll use like Pandas or NumPy to support the process.

00:25:12.240 --> 00:25:16.320
Like I think it generally prefers to work with, we prefer to work with Pandas data frames.

00:25:16.720 --> 00:25:26.980
So another thing that caught my attention, and I think you were touching on it before, is this idea of dependencies between the cells or blocks and the variables and like incremental computation.

00:25:26.980 --> 00:25:42.900
So if you have something that defines like X somewhere and then something else that maybe passes X to a function, Datalore is aware of that relationship and can do like a partial re-execution to make it go back and sync.

00:25:42.940 --> 00:25:43.280
Is that right?

00:25:43.280 --> 00:25:43.640
Yeah.

00:25:43.640 --> 00:25:49.080
Like if you update X way above, it'll know that you need to reevaluate that.

00:25:49.080 --> 00:25:50.400
I think that's a pretty cool feature.

00:25:50.400 --> 00:25:57.380
Like before you were talking about, you know, running the cells and say a Jupyter Notebook in different orders and getting different results.

00:25:57.380 --> 00:25:57.660
Right.

00:25:57.700 --> 00:26:00.280
Which it's not at all obvious how that happened.

00:26:00.280 --> 00:26:04.580
I know it has like a little number along the side of like order of execution.

00:26:04.580 --> 00:26:10.920
But like if you've got 20 cells, like do you really have that held in memory, in your memory of which order it is?

00:26:10.920 --> 00:26:11.720
Not really, right?

00:26:11.720 --> 00:26:15.080
I know from talking to people that for some people it isn't really a problem.

00:26:15.080 --> 00:26:22.200
But I think like if you have a lot of experience working with Jupyter Notebooks, you're probably used to it and you know how to work with it well.

00:26:22.200 --> 00:26:23.760
You know what trouble you can run into.

00:26:23.760 --> 00:26:24.720
So you just don't do it, right?

00:26:24.800 --> 00:26:26.700
Yeah, for me, it's always a problem.

00:26:26.700 --> 00:26:27.320
Yeah.

00:26:27.320 --> 00:26:29.200
Well, I'm not that experienced with Notebooks.

00:26:29.200 --> 00:26:34.240
And I think I imagine for a lot of people trying to break in, it is, you know, a hurdle you have to get through.

00:26:34.240 --> 00:26:34.560
Sure.

00:26:34.560 --> 00:26:43.280
So I guess once you kind of built up your data, maybe train some models with these intentions, things like that, you probably want to look at it, right?

00:26:43.280 --> 00:26:46.120
And so you talked about some libraries, you know, Matplotlib, for example.

00:26:46.120 --> 00:26:54.680
But you also have some built-in plotting libraries, one for like two-dimensional plots and one for geographical ones.

00:26:54.680 --> 00:26:56.840
So I guess what are those?

00:26:56.840 --> 00:27:02.900
And then like why not just import Altair or something, you know, like some other thing, right?

00:27:02.900 --> 00:27:04.320
Like why do you have your own?

00:27:04.320 --> 00:27:05.520
What are the benefits?

00:27:05.520 --> 00:27:09.960
I can't really compare and contrast with a lot of different libraries because I don't know them that well.

00:27:10.600 --> 00:27:14.540
But yeah, we do have, I guess, datalore.plot.

00:27:14.540 --> 00:27:17.040
That's the prefix for the library.

00:27:17.040 --> 00:27:19.120
It's our internal graphics library.

00:27:19.120 --> 00:27:20.920
It's based on the grammar of graphics.

00:27:20.920 --> 00:27:25.220
So it's going to be very similar to like ggplot2 and R.

00:27:25.740 --> 00:27:30.260
And I think there are some Python libraries that might also be based on the grammar of graphics.

00:27:30.260 --> 00:27:30.960
Sure.

00:27:30.960 --> 00:27:34.680
That I don't know about or I don't know the names of off the top of my head.

00:27:34.680 --> 00:27:41.060
My impression is that matplotlib is definitely the most popular library in Python for graphics or plotting.

00:27:41.060 --> 00:27:41.740
Yeah.

00:27:41.740 --> 00:27:48.900
But I have, well, me personally, and I guess enough other people that we decided to develop this library

00:27:48.900 --> 00:27:54.100
have this preference for the grammar of graphics for that different syntax.

00:27:54.680 --> 00:28:02.760
I remember in my days of working with MATLAB, the general torture that was working with graphics in MATLAB.

00:28:02.760 --> 00:28:07.440
And matplotlib is, as far as I understand, based on that or very similar.

00:28:07.440 --> 00:28:14.020
So yeah, I guess the motivation originally was to bring the grammar of graphics to Python, at least within our tool.

00:28:14.020 --> 00:28:14.380
Okay.

00:28:14.380 --> 00:28:16.220
You can still use the others?

00:28:16.220 --> 00:28:22.040
Like if I wanted to use some other library that typically works in Jupyter, I could install it, import it, run it?

00:28:22.040 --> 00:28:22.940
Yeah, it should work.

00:28:23.100 --> 00:28:25.480
If it doesn't, we appreciate the bug report.

00:28:25.480 --> 00:28:27.040
Sure.

00:28:27.040 --> 00:28:28.920
But the intention is that you can, right?

00:28:28.920 --> 00:28:29.420
Yeah.

00:28:29.420 --> 00:28:29.800
Yeah.

00:28:29.800 --> 00:28:30.100
Okay.

00:28:30.100 --> 00:28:35.300
So I guess another question that makes me start to think of is, what about dependencies?

00:28:35.300 --> 00:28:40.500
Like how do I specify my Python dependencies, the other libraries I'm going to use?

00:28:40.500 --> 00:28:41.740
And then how do I get them?

00:28:41.740 --> 00:28:48.780
Like if it's running on your cloud, how do I get the five libraries off PyPI that I actually need to do my thing?

00:28:48.900 --> 00:28:51.040
So we have a library manager.

00:28:51.040 --> 00:28:54.820
Like we have a tool that lets you set up a custom environment.

00:28:54.820 --> 00:29:03.440
We have some default environment and includes a lot of the basics that you probably want, like NumPy and Pandas and scikit-learn and matplotlib.

00:29:03.440 --> 00:29:03.800
Right.

00:29:03.800 --> 00:29:06.160
You might as well just start with those installed, right?

00:29:06.160 --> 00:29:06.880
Right.

00:29:06.880 --> 00:29:07.380
Exactly.

00:29:07.380 --> 00:29:16.880
But then you have the option to use this library manager to add whichever libraries you like from Conda, from pip.

00:29:16.880 --> 00:29:21.420
Even if you have access to some GitHub repo.

00:29:21.420 --> 00:29:22.060
Right.

00:29:22.060 --> 00:29:25.540
Where you pip with the git command just to the repo base.

00:29:25.540 --> 00:29:25.960
Yeah.

00:29:25.960 --> 00:29:26.300
Yeah.

00:29:26.300 --> 00:29:27.520
So you can install from GitHub.

00:29:27.880 --> 00:29:33.260
Yeah, but basically you can install whatever you really need to to do your work, right?

00:29:33.260 --> 00:29:33.600
Yeah.

00:29:33.600 --> 00:29:38.100
For now, as we sort of started at the beginning, Datalore is a cloud thing.

00:29:38.100 --> 00:29:45.960
I know there's a ton of people out there listening going, that's great, but my company won't let me upload my data to a cloud thing.

00:29:47.260 --> 00:29:49.180
Is there a way to run it on premise?

00:29:49.180 --> 00:29:57.740
Maybe even if that's not like pip installed Datalore, but maybe it's like, here's a virtual machine you can license from us internally.

00:29:57.740 --> 00:30:01.020
Unfortunately, no, it's not possible right now.

00:30:01.020 --> 00:30:09.060
It's something we're very much aware of because we've heard this feedback, this exact feedback from a number of users through various channels.

00:30:09.060 --> 00:30:13.360
So it's very much something that's like on our radar, something that we could consider.

00:30:13.360 --> 00:30:16.380
But unfortunately, right now it is not supported, no.

00:30:16.380 --> 00:30:18.800
And if it's not, maybe that's fine, right?

00:30:18.800 --> 00:30:22.300
Like Google Docs doesn't have an on-prem Google Docs.

00:30:22.300 --> 00:30:22.560
Yeah.

00:30:22.560 --> 00:30:23.520
Just don't do it, right?

00:30:23.520 --> 00:30:31.600
I do think that a lot of the data science folks are analyzing data that's pretty closely guarded, right?

00:30:31.600 --> 00:30:31.980
Yeah.

00:30:31.980 --> 00:30:33.520
It would be good, but who knows?

00:30:33.520 --> 00:30:36.860
As I said, it's not the first time we've heard it.

00:30:36.860 --> 00:30:37.580
Yeah.

00:30:37.580 --> 00:30:41.980
Is the source code for Datalore available or is it private?

00:30:41.980 --> 00:30:42.880
Right now it's private.

00:30:42.880 --> 00:30:43.400
Okay.

00:30:43.400 --> 00:30:44.520
It doesn't surprise me.

00:30:44.700 --> 00:30:49.140
Even for public, it's probably like deeply bound to your infrastructure.

00:30:49.140 --> 00:30:50.240
You know what I mean?

00:30:50.240 --> 00:30:50.680
Yeah.

00:30:50.680 --> 00:30:53.800
I mean, I can't say if there are any plans to open source it or not.

00:30:53.800 --> 00:30:57.700
We have open sourced some projects and other projects we've never open sourced.

00:30:57.700 --> 00:31:00.180
It's not really my decision in the end either.

00:31:00.180 --> 00:31:00.540
Sure.

00:31:00.540 --> 00:31:08.140
So there's different ways, like different machines or computational units, whatever you can buy to like do your analysis.

00:31:08.140 --> 00:31:21.500
So you start out, you can just play around with like some moderate virtual machine that it's running on, but you can get like a higher end computation or can you run it on, run your stuff on GPUs as well?

00:31:21.740 --> 00:31:22.740
Yes, you can.

00:31:22.740 --> 00:31:23.460
How's that work?

00:31:23.460 --> 00:31:25.540
The only thing that's available.

00:31:25.540 --> 00:31:27.840
So we have two different plans right now.

00:31:27.840 --> 00:31:29.940
We have a free plan, a paid plan.

00:31:29.940 --> 00:31:39.100
The only thing that's available on the free plan is just these medium, like these moderate instances, which work fine for just some general all-purpose stuff.

00:31:39.520 --> 00:31:46.200
But if you upgrade, you have the opportunity to upgrade to larger, more powerful machines.

00:31:46.200 --> 00:31:51.700
All of these right now are posted on AWS, so you can even look them up on AWS.

00:31:51.700 --> 00:31:55.500
But one of them does include GPUs.

00:31:55.500 --> 00:31:56.020
Right.

00:31:56.020 --> 00:32:06.920
One of them is, I guess, in EC2 parlance, a P2X large, which would be a four CPU and single GPU machine with 61 gigs of RAM.

00:32:07.380 --> 00:32:10.080
That's a pretty serious machine with 12 gigs of GPU RAM.

00:32:10.080 --> 00:32:10.460
Yeah.

00:32:10.460 --> 00:32:12.300
Maybe we talk about pricing as well.

00:32:12.300 --> 00:32:19.220
So this is both a thing you can use for free and also something you can pay to get more for, right?

00:32:19.220 --> 00:32:19.760
Right.

00:32:19.760 --> 00:32:22.240
What do you get for free and then what do you have to pay for?

00:32:22.240 --> 00:32:28.940
What you get for free is a monthly allowance on these moderate machines.

00:32:28.940 --> 00:32:33.920
I think 120 hours per month across all your various computations.

00:32:33.920 --> 00:32:38.440
Is that actual execution time or just like I'm working with my notebook?

00:32:38.440 --> 00:32:40.940
The second one, like when you're working on the notebook.

00:32:40.940 --> 00:32:43.920
Like if I have it open and I'm interacting with it rather than...

00:32:43.920 --> 00:32:47.520
So like what if I leave my browser open and I go to lunch?

00:32:47.520 --> 00:32:48.640
Does that count towards my hour?

00:32:48.640 --> 00:32:50.200
It does.

00:32:50.200 --> 00:33:00.560
Now, eventually we will shut it down if it's been idle for a really long time because we don't want you to just like run through your full allowance by accident without realizing it.

00:33:00.660 --> 00:33:04.080
As long as it's open, we keep the instance running.

00:33:04.080 --> 00:33:04.660
Right.

00:33:04.660 --> 00:33:09.780
So 120 hours is like if you do that eight hours a day, that's 15 days a month.

00:33:09.780 --> 00:33:12.300
I got still, you know, that's a lot of time for free.

00:33:12.300 --> 00:33:18.580
So I just want to make sure people understand like what it is when you say hour, what you're actually talking about, right?

00:33:18.580 --> 00:33:19.140
That's fair.

00:33:19.500 --> 00:33:26.680
Then if you, so if you upgrade, you unlock the ability to use some of these larger, more powerful machines.

00:33:26.680 --> 00:33:28.800
You still have to pay for them, I guess.

00:33:28.800 --> 00:33:32.560
But like we have various different machines depending on what you need.

00:33:32.560 --> 00:33:38.080
But you basically pay like the EC2 price of the machines if you select them?

00:33:38.240 --> 00:33:39.620
It's marked up.

00:33:39.620 --> 00:33:43.100
I mean, you can look up the EC2 prices, so it's not going to be exactly the same.

00:33:43.100 --> 00:33:43.560
Sure.

00:33:43.560 --> 00:33:47.720
But it's going to be based roughly on the EC2 prices.

00:33:47.720 --> 00:33:50.480
The more expensive machines will obviously cost more.

00:33:50.480 --> 00:33:52.240
The less expensive machines will cost less.

00:33:52.240 --> 00:33:53.980
Well, that sounds pretty cool.

00:33:54.100 --> 00:34:02.620
I mean, the fact that there's quite a bit of free space and computation and whatnot, I think that's what it takes to be interesting to everybody, right?

00:34:02.620 --> 00:34:03.120
Yeah.

00:34:03.120 --> 00:34:08.300
At the end of the day, we are competing with an open source thing, which will always be open source.

00:34:08.300 --> 00:34:10.440
So we'd better do something more.

00:34:10.440 --> 00:34:12.060
Yeah.

00:34:12.060 --> 00:34:12.320
Yeah.

00:34:12.320 --> 00:34:13.540
I think it makes sense.

00:34:13.540 --> 00:34:14.920
It seems pretty fair.

00:34:14.920 --> 00:34:20.340
This portion of Talk Python To Me is brought to you by Brilliant.org.

00:34:20.940 --> 00:34:27.560
Many of you have come to software development and data science through paths that did not include a full-on computer science or mathematic degree.

00:34:27.560 --> 00:34:32.160
Yet, in our technical field, you may find you need to learn exactly these topics.

00:34:32.160 --> 00:34:33.820
You could go back to university.

00:34:33.820 --> 00:34:37.740
But then again, this is the 21st century, and we do have the internet.

00:34:37.740 --> 00:34:42.440
Why not take some engaging online courses to quickly get just the skills that you need?

00:34:42.440 --> 00:34:44.680
That's where Brilliant.org comes in.

00:34:44.680 --> 00:34:47.140
They believe that effective learning is active.

00:34:47.700 --> 00:34:51.860
So master the concepts you need by solving fun, challenging problems yourself.

00:34:51.860 --> 00:34:53.500
Get started today.

00:34:53.500 --> 00:34:57.540
Just visit talkpython.fm/brilliant and sign up for free.

00:34:57.540 --> 00:34:58.720
And don't wait either.

00:34:58.720 --> 00:35:03.060
If you decide to upgrade to a paid account for guided courses and more practice exercises,

00:35:03.060 --> 00:35:09.500
the first 200 people that sign up from Talk Python will get an extra 20% off an annual premium subscription.

00:35:09.500 --> 00:35:12.540
That's talkpython.fm/brilliant.

00:35:14.420 --> 00:35:18.120
I ask if it will run outside of your cloud.

00:35:18.120 --> 00:35:19.900
And right now you say, no, it's hosted at EC2.

00:35:19.900 --> 00:35:22.540
Can I pick where it runs in EC2?

00:35:22.540 --> 00:35:30.600
Like, suppose I work on healthcare and it has to stay, you know, within Europe or has to stay within France or something.

00:35:30.600 --> 00:35:31.600
At the moment, no.

00:35:31.600 --> 00:35:34.180
You can't pick which cloud it runs in.

00:35:34.180 --> 00:35:37.080
But basically, right now, we don't have like a dropdown.

00:35:37.080 --> 00:35:41.780
Like, I want to do my work in Europe or I want to do my work in the US or something like that.

00:35:41.780 --> 00:35:43.120
No, there's nothing like that.

00:35:43.120 --> 00:35:43.560
Yeah.

00:35:43.560 --> 00:35:45.760
Do you know if there's any plans for something like that?

00:35:45.760 --> 00:35:47.240
I'm not sure, actually.

00:35:47.240 --> 00:35:57.300
It's, I mean, one thing we always have to keep our eye on is all the different privacy laws and make sure that we're not doing something untoward with anyone's data.

00:35:57.300 --> 00:35:59.820
Making sure that we're always complying.

00:36:00.280 --> 00:36:05.880
Yeah, I mean, there's certainly value to the privacy laws, but man, they can be hard to keep straight.

00:36:05.880 --> 00:36:08.140
Because it's not just one country, right?

00:36:08.140 --> 00:36:08.980
It's all the countries.

00:36:08.980 --> 00:36:09.340
Right.

00:36:09.340 --> 00:36:13.920
And if you have users in one country, you have to comply with the laws for that country, for that user.

00:36:14.740 --> 00:36:15.500
Yes, exactly.

00:36:15.500 --> 00:36:17.660
It's, you know, welcome to the internet, right?

00:36:17.660 --> 00:36:18.060
Yeah.

00:36:19.520 --> 00:36:29.480
So if people want to go and play around or explore data lore, you have a set of pre-built notebooks that they can go play with.

00:36:29.480 --> 00:36:32.100
You want to maybe talk us through some of those that they can explore?

00:36:32.340 --> 00:36:32.740
Right.

00:36:32.740 --> 00:36:34.280
We do have some sample workbooks.

00:36:34.280 --> 00:36:41.840
I am not too up to date on what the exact sample workbooks are on, but we actually do have some set here, which is kind of nice.

00:36:41.840 --> 00:36:45.200
So the first one, these links will be somewhere.

00:36:45.200 --> 00:36:48.880
So yeah, the links are super long and crazy, and I'll put them in the show notes.

00:36:48.880 --> 00:36:50.760
So don't worry about trying to say them.

00:36:50.760 --> 00:36:53.120
They're like, you know, UUID type of things.

00:36:53.120 --> 00:36:53.360
Yeah.

00:36:53.360 --> 00:36:53.620
Yeah.

00:36:53.620 --> 00:37:01.180
In any case, if I'm understanding correctly, I think if you create an account, these workbooks will be automatically created for you.

00:37:01.280 --> 00:37:03.000
So you can see them for yourself.

00:37:03.000 --> 00:37:03.440
Exactly.

00:37:03.440 --> 00:37:07.860
Under your home, you've got like, when I log in, at least in my account, I haven't done really much.

00:37:07.860 --> 00:37:09.580
So like, this has got to be what's coming with it.

00:37:09.580 --> 00:37:12.560
You know, there's like a scikit learn section.

00:37:12.560 --> 00:37:16.160
There's a map section and there's a plotting section.

00:37:16.160 --> 00:37:17.600
And the plotting has the most actually.

00:37:17.600 --> 00:37:18.020
Yeah.

00:37:18.020 --> 00:37:19.500
I guess we're kind of proud of it.

00:37:19.500 --> 00:37:20.600
We want to show it off.

00:37:20.600 --> 00:37:21.420
Yeah, sure.

00:37:21.420 --> 00:37:28.800
In any case, I guess the first one, we're basically showing, first of all, in pandas, you have this scatter matrix function.

00:37:28.960 --> 00:37:31.120
It's very useful for like some exploration.

00:37:31.120 --> 00:37:39.180
You can see distributions of the different features as well as their distributions with each other, whatever the right terminology is.

00:37:39.180 --> 00:37:42.640
I feel like I'm butchering data science terminology as we go along.

00:37:42.640 --> 00:37:47.780
But in any case, so first we're showing how you can generate the scatter matrix in pandas.

00:37:47.780 --> 00:37:52.540
But then we also want to show how you can do it using data lore plot, using the internal plotting.

00:37:52.540 --> 00:37:58.860
So first of all, you can create a scatter pretty easily for any pair of features that you have.

00:37:58.860 --> 00:38:04.020
You can also create a histogram using the geom point and geom histogram functions.

00:38:04.020 --> 00:38:10.020
You can update it to show density instead of just the counts of the different bins.

00:38:10.420 --> 00:38:10.860
Yeah, nice.

00:38:10.860 --> 00:38:19.420
So basically, like all the plotting that you, most plotting you want to do with like ggplot or the data lore plotting stuff, right?

00:38:19.420 --> 00:38:19.740
Yeah.

00:38:19.740 --> 00:38:20.080
Yeah.

00:38:20.080 --> 00:38:20.640
So these are nice.

00:38:20.640 --> 00:38:22.400
These graphs are pretty interactive.

00:38:22.400 --> 00:38:22.940
Yeah.

00:38:22.940 --> 00:38:24.820
I guess that's something I didn't even talk about yet.

00:38:24.820 --> 00:38:26.280
They are interactive.

00:38:26.280 --> 00:38:32.280
Like if you hover over them, you can see the different points on them, like the different coordinates, which is kind of cool.

00:38:32.280 --> 00:38:32.720
I like it.

00:38:32.720 --> 00:38:33.380
It's quite nice.

00:38:33.380 --> 00:38:38.680
So you have another one on like Bayesian inference, which is pretty cool.

00:38:38.680 --> 00:38:46.420
So one thing here that I'm seeing is, gosh, I'm not entirely sure what the syntax is.

00:38:46.420 --> 00:38:48.360
I think it might be LaTeX.

00:38:48.360 --> 00:38:57.380
So at the top, you've got basically really symbolically nice mathematics in here, right?

00:38:57.380 --> 00:38:57.780
Yeah.

00:38:57.780 --> 00:39:08.200
That's pretty cool that you can actually write the formulas in mathematical notation, not just trying to put, you know, ASCII characters to make like the integral sign look like an integral sign or something.

00:39:08.200 --> 00:39:13.300
Yeah, basically we have support, we have these markdown cells or blocks as I guess we call them.

00:39:13.300 --> 00:39:19.940
And you can include LaTeX into these cells as you can see there, which is always kind of fun.

00:39:19.940 --> 00:39:21.940
It does make for a nice presentation.

00:39:21.940 --> 00:39:22.500
Yeah.

00:39:22.500 --> 00:39:26.140
I have totally mixed feelings about LaTeX coming from a math background.

00:39:26.140 --> 00:39:28.420
Like I love the outcome.

00:39:28.420 --> 00:39:31.080
I hate the creation of it.

00:39:31.080 --> 00:39:31.900
It's so painful.

00:39:31.900 --> 00:39:32.820
It's so not obvious.

00:39:32.820 --> 00:39:34.020
I can fully understand.

00:39:34.020 --> 00:39:44.320
But see, when I was in college, what made LaTeX bearable for me was I started discovering tools like, I don't remember if it was called Overleaf then and it's write LaTeX now or vice versa.

00:39:44.320 --> 00:39:49.340
But it was basically this real-time LaTeX editor, which was collaborative.

00:39:49.340 --> 00:39:50.360
Oh, interesting.

00:39:50.360 --> 00:39:55.780
You could switch between modes like compile incrementally or just you press a button to compile.

00:39:55.780 --> 00:40:02.400
But it gave you like the real-time feedback about exactly what you were writing, which was always really cool.

00:40:02.400 --> 00:40:03.320
Yeah, that's pretty cool.

00:40:03.400 --> 00:40:06.560
And for people who don't know, LaTeX is basically, it's been around for a while.

00:40:06.560 --> 00:40:11.180
It's kind of like a markdown syntax, but for symbolic mathematics.

00:40:11.180 --> 00:40:17.260
Like I want the sum from n equals 0 to 1, or for 100, you know, of like it'll actually do all the symbols, right?

00:40:17.260 --> 00:40:19.540
And it used a lot in like math papers and whatnot.

00:40:19.540 --> 00:40:20.980
So let's see, what else?

00:40:20.980 --> 00:40:27.140
We got a lot of like a whole bunch of the data lore plot stuff, the geometry and whatnot.

00:40:28.140 --> 00:40:35.700
And you have some California housing data as well graphed out, which has got some cool geometry stuff.

00:40:35.700 --> 00:40:38.700
And it pulls in open street map and then like overlays it, right?

00:40:38.700 --> 00:40:39.860
Something like that.

00:40:39.860 --> 00:40:40.700
That's pretty nice.

00:40:40.700 --> 00:40:46.660
So I guess that's just using the California housing data from scikit-learn datasets.

00:40:46.660 --> 00:40:47.420
Exactly.

00:40:47.920 --> 00:40:51.080
It conveniently has the latitude and longitude coordinates.

00:40:51.080 --> 00:40:54.960
So we can just plot every point on the map as we see it, which is kind of neat.

00:40:54.960 --> 00:40:55.380
That's cool.

00:40:55.380 --> 00:41:03.320
So one thing at the bottom that's pretty interesting is it's got a picture of airplanes flying along the Hudson.

00:41:04.080 --> 00:41:11.320
And it overlays like animated flying airplanes using the geography plotting stuff, which is, that's pretty awesome.

00:41:11.320 --> 00:41:15.340
I don't work on this myself, but I'm always amazed at the new features that keep coming out.

00:41:15.340 --> 00:41:18.580
Like all the different things you can do with the maps and the plots.

00:41:18.580 --> 00:41:22.920
I think this is one of my favorite little animations is showing the different routes.

00:41:22.920 --> 00:41:24.640
You sit there and watch them fly along.

00:41:24.640 --> 00:41:25.520
That's pretty cool.

00:41:25.520 --> 00:41:25.880
Yeah.

00:41:25.880 --> 00:41:29.660
So people can check out those shared notebooks on data lore and play with them.

00:41:29.660 --> 00:41:33.440
Basically, like you said, if you create an account, you get all those like in your account.

00:41:33.440 --> 00:41:33.800
Yep.

00:41:33.800 --> 00:41:34.180
Yeah.

00:41:34.180 --> 00:41:36.880
What about a version control, right?

00:41:36.880 --> 00:41:47.460
Like if I have Jupyter Notebook local or specially if I have Python files locally, it's super easy to check that into GitHub, do a diff, do a branch, do a PR.

00:41:47.460 --> 00:41:49.820
Like what does a version control look like over here?

00:41:49.820 --> 00:41:53.240
We have our own integrated version control.

00:41:53.240 --> 00:41:55.380
Basically, we have this thing called history.

00:41:55.380 --> 00:42:02.100
Every now and then, if there's some inactivity, we'll just keep a checkpoint, kind of like a commit or something.

00:42:02.100 --> 00:42:03.020
You can think of it.

00:42:03.020 --> 00:42:03.260
Okay.

00:42:03.260 --> 00:42:05.820
Or you can make your own as you need to.

00:42:05.820 --> 00:42:07.520
And then you can compare the diffs.

00:42:07.520 --> 00:42:09.940
You can revert to the previous version.

00:42:09.940 --> 00:42:14.060
I think you can even revert specific changes, but you'd have to check me on that one.

00:42:14.060 --> 00:42:15.920
Basically, like this internal version control.

00:42:15.920 --> 00:42:16.540
That's pretty cool.

00:42:16.540 --> 00:42:19.000
And how do I, like, can I branch?

00:42:19.000 --> 00:42:20.580
Can I do stuff like that?

00:42:20.580 --> 00:42:21.720
No, it's completely linear.

00:42:21.720 --> 00:42:23.880
So no branching involved here.

00:42:23.880 --> 00:42:28.800
So right now, basically, it just, I can go forward or backwards in time for now, right?

00:42:29.000 --> 00:42:29.200
Yeah.

00:42:29.200 --> 00:42:29.240
Yeah.

00:42:29.240 --> 00:42:32.040
You can't really do branches or merges or anything like that.

00:42:32.040 --> 00:42:38.680
So one thing I'm noticing is I can export a Datalore file, which is kind of cool, right?

00:42:38.720 --> 00:42:43.300
So I theoretically could export the Datalore file and then check that into GitHub.

00:42:43.300 --> 00:42:44.860
That's one possibility.

00:42:44.860 --> 00:42:45.220
Yeah.

00:42:45.220 --> 00:42:45.480
Right.

00:42:45.480 --> 00:42:46.840
And then I do save points there.

00:42:46.840 --> 00:42:53.040
You can also export Jupyter Notebook format, the IPYNV format.

00:42:53.040 --> 00:42:53.540
Yeah.

00:42:53.720 --> 00:42:54.620
Can you go the other way?

00:42:54.620 --> 00:42:55.440
Can I import?

00:42:55.440 --> 00:42:56.000
Yes.

00:42:56.000 --> 00:43:02.000
Like, if I create a new notebook, can I say from this Jupyter Notebook or from someone else's Datalore notebook?

00:43:02.000 --> 00:43:03.220
Yeah, I'm pretty sure you can.

00:43:03.220 --> 00:43:07.960
If you go to the, if you're in the file system view, there should be a button.

00:43:07.960 --> 00:43:14.660
It looks kind of like the button to create a workbook, but basically it lets you import a workbook.

00:43:14.780 --> 00:43:26.260
It could have that Datalore format or it could have the IPNB, IPYNB, IPYNB, IPYNB, IPYNB, IPYNB.

00:43:26.260 --> 00:43:30.260
So yeah, we can import Jupyter Notebooks into Datalore.

00:43:30.260 --> 00:43:36.320
I think that would be a good place, a good way for people who are doing now, doing Jupyter and Explorer,

00:43:36.320 --> 00:43:39.620
just like, hey, what does it look like if I were to do the same work, but over here?

00:43:39.620 --> 00:43:40.060
Right.

00:43:40.060 --> 00:43:40.320
Yeah.

00:43:40.320 --> 00:43:44.480
I think that could be an interesting idea to try instead of just trying to start from scratch.

00:43:44.480 --> 00:43:49.940
You try to take some established work from Jupyter and see what it looks like working with it in Datalore.

00:43:49.940 --> 00:43:50.320
Right.

00:43:50.320 --> 00:43:53.660
Grab some interesting notebook off of GitHub and throw it in there.

00:43:53.660 --> 00:43:54.280
Okay.

00:43:54.280 --> 00:43:55.580
That sounds pretty good.

00:43:55.580 --> 00:44:01.440
I guess the final thing around Datalore would be, where is it going?

00:44:01.440 --> 00:44:03.700
It's pretty new, right?

00:44:03.700 --> 00:44:06.620
It just went 1.0 not long ago, right?

00:44:06.620 --> 00:44:08.280
Yeah, I think in October.

00:44:08.280 --> 00:44:09.000
What is that?

00:44:09.000 --> 00:44:10.460
Four months, something like that.

00:44:10.460 --> 00:44:11.540
So it's pretty new.

00:44:11.540 --> 00:44:16.800
And now that your app has met users, I'm sure you got some feedback.

00:44:16.800 --> 00:44:17.920
Yeah.

00:44:17.920 --> 00:44:20.200
What are you thinking on working on next?

00:44:20.200 --> 00:44:27.020
I can't really talk too much about the big features that we're working on, or big new features that we're working on.

00:44:27.020 --> 00:44:32.100
Certainly one of the big things that we try to do is, as we get feedback, we want to act on that feedback.

00:44:32.280 --> 00:44:35.260
We want users to get the sense that we actually care about what they're saying.

00:44:35.260 --> 00:44:38.060
I can't think of specific features that were suggested by users.

00:44:38.060 --> 00:44:47.220
I can certainly think of a lot of bugs that were reported, for example, and that they get that extra urgency because they're coming from the users and we want to fix it so that they can continue to work with the tool.

00:44:47.220 --> 00:44:52.000
So that's certainly a big part of the, I guess, philosophy or something.

00:44:52.000 --> 00:44:52.320
Okay.

00:44:52.320 --> 00:45:00.720
I did see in the blog post that announced the release of 1.0, there was a bunch of feedback in the comments around there.

00:45:00.720 --> 00:45:09.500
And one thing, I don't know how much my audience would care, but I know that they were asking, people were asking for Kotlin support, which Kotlin is a language JetBrains created.

00:45:09.500 --> 00:45:11.360
That's like a better Java.

00:45:11.360 --> 00:45:12.600
That's kind of the way I think of it.

00:45:12.600 --> 00:45:13.620
I don't know what happened.

00:45:13.740 --> 00:45:14.560
That's the idea.

00:45:14.560 --> 00:45:21.580
So are you planning on adding other languages like Kotlin or JavaScript or R or whatever?

00:45:21.580 --> 00:45:23.420
Or is it really focused on Python?

00:45:23.420 --> 00:45:25.060
For now, the focus is on Python.

00:45:25.060 --> 00:45:29.340
But the idea of supporting other languages, it's definitely something on our radar.

00:45:29.340 --> 00:45:36.000
We've been asked about, I think, R, Scala, Kotlin, probably a few others.

00:45:36.000 --> 00:45:39.460
So it's definitely something that's on our radar.

00:45:39.460 --> 00:45:42.240
I can't say whether or not we're working directly on it right now.

00:45:42.240 --> 00:45:42.660
Cool.

00:45:42.840 --> 00:45:47.280
Well, it's definitely an interesting entry in this whole computational notebook space.

00:45:47.280 --> 00:45:52.640
I think the smart editor features sort of borrowed from PyCharm is really cool.

00:45:52.640 --> 00:45:53.980
I think the collaboration is really cool.

00:45:53.980 --> 00:45:57.500
So hopefully people find it an interesting thing to consider.

00:45:57.500 --> 00:45:58.400
I hope so, yeah.

00:45:58.400 --> 00:45:58.680
All right.

00:45:58.680 --> 00:46:03.960
So I guess before I let you out of here, let me ask you the final two questions I always ask folks.

00:46:03.960 --> 00:46:07.800
So if you're going to write some Python code, what editor would you use?

00:46:07.800 --> 00:46:11.380
I feel like I only have one correct answer.

00:46:12.260 --> 00:46:14.700
I'm going to go ahead and say PyCharm.

00:46:14.700 --> 00:46:25.320
Though realistically, technically, I'm using IntelliJ IDEA for all my Python editing, but it has the Python plugin, which gives me PyCharm, basically.

00:46:25.320 --> 00:46:25.880
Yeah, exactly.

00:46:26.480 --> 00:46:28.680
So effectively, more or less the same thing.

00:46:28.680 --> 00:46:35.060
And then notable Python package that people might find interesting out there that maybe they don't know about.

00:46:35.060 --> 00:46:38.820
I don't know if I can really name something that a lot of people won't know about.

00:46:39.120 --> 00:46:41.680
I think my personal favorite.

00:46:41.680 --> 00:46:43.740
I really like SymPy.

00:46:43.740 --> 00:46:49.160
At least just the concept of SymPy is really neat to me, like the symbolic mathematics in Python.

00:46:49.160 --> 00:46:50.200
Yeah, that's really cool.

00:46:50.200 --> 00:46:51.340
I haven't used it.

00:46:51.340 --> 00:46:52.580
I've heard of it before.

00:46:52.580 --> 00:46:55.040
Maybe just tell really quick what it is.

00:46:55.280 --> 00:46:58.660
It's bringing symbolic mathematics into Python.

00:46:58.660 --> 00:47:04.200
Like you can define variables and build mathematical formulas, equations in SymPy.

00:47:04.200 --> 00:47:04.440
Right.

00:47:04.440 --> 00:47:13.940
So I could give it like a quadratic equation and say solve for Y and it'll or solve for X and it'll like express it in terms of, you know, things like that.

00:47:14.020 --> 00:47:15.400
It will be able to do that.

00:47:15.400 --> 00:47:26.200
I saw a demo, which was pretty neat, in which basically it was, you would define this partial differential equation and it would build a numeric solver for it.

00:47:26.200 --> 00:47:26.760
Oh, wow.

00:47:26.760 --> 00:47:27.060
Okay.

00:47:27.060 --> 00:47:32.780
I don't remember how that happened, but I remember seeing that tutorial and I thought it was really neat.

00:47:32.780 --> 00:47:33.540
That's pretty cool.

00:47:33.540 --> 00:47:39.400
Basically, all I remember from partial differential equations is that they were hard and I would love a library to solve them for me.

00:47:39.400 --> 00:47:39.760
Yeah.

00:47:39.760 --> 00:47:47.200
So, yeah, I think for me, the appeal is mostly just like the mathematician in me likes the idea.

00:47:47.200 --> 00:47:51.740
It sounds really cool and it ties in well with like all the other stuff that we're talking about here.

00:47:51.740 --> 00:47:52.520
Great.

00:47:52.520 --> 00:47:52.840
All right.

00:47:52.840 --> 00:47:54.180
Well, final call to action.

00:47:54.180 --> 00:47:56.200
People maybe are interested in Datalore.

00:47:56.200 --> 00:47:56.920
What do they do?

00:47:56.920 --> 00:48:02.820
Go to datalore.io and create an account and check it out if it sounds at all interesting.

00:48:02.820 --> 00:48:05.360
You can play around with the samples that we have.

00:48:05.360 --> 00:48:10.120
You can even upload your own notebooks, see what it's like to play with them in Datalore.

00:48:10.120 --> 00:48:10.620
Awesome.

00:48:10.620 --> 00:48:15.020
Well, Adam, thanks so much for being on the show and sharing your part of Datalore.

00:48:15.020 --> 00:48:15.420
It's cool.

00:48:15.420 --> 00:48:16.480
Thank you for having me.

00:48:16.480 --> 00:48:16.860
You bet.

00:48:16.860 --> 00:48:17.080
Bye.

00:48:17.080 --> 00:48:17.320
Bye.

00:48:17.320 --> 00:48:20.680
This has been another episode of Talk Python To Me.

00:48:20.680 --> 00:48:26.320
Our guest on this episode was Adam Hood and it's been brought to you by Linode and Brilliant.org.

00:48:26.320 --> 00:48:30.260
Linode is your go-to hosting for whatever you're building with Python.

00:48:30.260 --> 00:48:33.800
Get four months free at talkpython.fm/Linode.

00:48:33.800 --> 00:48:35.740
That's L-I-N-O-D-E.

00:48:35.740 --> 00:48:41.280
Brilliant.org wants to help you level up your math and science through fun, guided problem solving.

00:48:41.280 --> 00:48:45.160
Get started for free at talkpython.fm/brilliant.

00:48:45.160 --> 00:48:47.840
Want to level up your Python?

00:48:47.840 --> 00:48:52.680
If you're just getting started, try my Python Jumpstart by Building 10 Apps course.

00:48:52.800 --> 00:49:00.840
Or if you're looking for something more advanced, check out our new async course that digs into all the different types of async programming you can do in Python.

00:49:00.840 --> 00:49:05.520
And of course, if you're interested in more than one of these, be sure to check out our Everything Bundle.

00:49:05.520 --> 00:49:07.400
It's like a subscription that never expires.

00:49:07.400 --> 00:49:09.700
Be sure to subscribe to the show.

00:49:09.700 --> 00:49:12.200
Open your favorite podcatcher and search for Python.

00:49:12.200 --> 00:49:13.320
We should be right at the top.

00:49:13.320 --> 00:49:22.320
You can also find the iTunes feed at /itunes, the Google Play feed at /play, and the direct RSS feed at /rss on talkpython.fm.

00:49:22.420 --> 00:49:24.420
This is your host, Michael Kennedy.

00:49:24.420 --> 00:49:25.920
Thanks so much for listening.

00:49:25.920 --> 00:49:27.000
I really appreciate it.

00:49:27.000 --> 00:49:28.740
Now get out there and write some Python code.

00:49:28.740 --> 00:49:29.320
I'll see you next time.

00:49:29.320 --> 00:49:29.420
Bye.

00:49:29.420 --> 00:49:29.440
Bye.

00:49:29.440 --> 00:49:29.440
Bye.

00:49:29.440 --> 00:49:29.560
Bye.

00:49:29.560 --> 00:49:59.540
Thank you.