WEBVTT

00:00:00.001 --> 00:00:05.080
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to

00:00:05.080 --> 00:00:12.180
your earbuds, or in this case, your eyeballs also. This is episode 210, recorded November 23rd,

00:00:12.180 --> 00:00:16.120
2020. And I'm Brian Okken. I'm Michael Kennedy. Yeah, I'm Jay.

00:00:16.120 --> 00:00:19.380
Hi. Jay Miller. Welcome to Python Bytes, man.

00:00:19.380 --> 00:00:24.980
I'm glad to be here. I will say this is hard because coming up with picks for

00:00:24.980 --> 00:00:29.700
the show that you normally get all your picks from is quite the challenge.

00:00:30.260 --> 00:00:33.700
Have we pulled the rug out from you? Like normally you would just listen and then go,

00:00:33.700 --> 00:00:35.460
here we go. But now it's...

00:00:35.460 --> 00:00:40.640
I'm not going to lie. I went to the search page and typed in like my first three picks and sure

00:00:40.640 --> 00:00:41.380
enough, they were taken.

00:00:41.380 --> 00:00:46.540
No, there's 210 episodes. So we just have been recycling them for like the last four months.

00:00:46.540 --> 00:00:49.120
We just started with zero and started over again.

00:00:49.120 --> 00:00:52.200
Yeah. If people listen, like, what are we on? I caught in episode 40 again.

00:00:52.200 --> 00:00:57.080
Yeah. Funny. We probably could, but you know, anyway.

00:00:57.220 --> 00:01:01.280
Only our best fans would know. And Brian, we're live streaming as well. We should tell

00:01:01.280 --> 00:01:04.500
the non-live stream listeners that this might be a thing in the future.

00:01:04.500 --> 00:01:08.760
Yeah, this might be a thing. We're going to see how it goes. It's kind of fun. We're live

00:01:08.760 --> 00:01:13.000
streaming right now, but that's boring for people that are listening to us in the future.

00:01:13.000 --> 00:01:13.880
But anyway.

00:01:13.880 --> 00:01:17.460
Yeah, we'll put a link and like a way to know when we're live streaming and stuff like

00:01:17.460 --> 00:01:19.160
that. So we'll talk more about that later.

00:01:19.160 --> 00:01:19.700
Yeah.

00:01:19.700 --> 00:01:23.940
Well, let's start it off. I want to talk about Kickstarter. So you had a Kickstarter campaign

00:01:23.940 --> 00:01:25.640
once a long time ago, right?

00:01:25.640 --> 00:01:30.660
I did. I've actually done three Kickstarter campaigns. One for a bunch of t-shirts, which

00:01:30.660 --> 00:01:35.640
was a ton of work and was fun, but shipping thousand shirts or something was quite the deal.

00:01:35.640 --> 00:01:41.360
Maybe not that many, but many shirts. And I did one to start the training company around

00:01:41.360 --> 00:01:46.060
the Python Jumpstart course, which was awesome. And I did one with Matt Makai for the Python

00:01:46.060 --> 00:01:48.240
for Entrepreneurs course. So yeah, I love Kickstarter.

00:01:48.240 --> 00:01:52.500
So I think Kickstarter is a pretty cool thing. And so I was interested to see, there was an

00:01:52.500 --> 00:01:58.660
article called Kickstarter projects. Do they succeed? But yes, the success or failure of

00:01:58.660 --> 00:02:04.200
them is sort of interesting. I really loved that this was an analysis done with Python data

00:02:04.200 --> 00:02:10.800
science tools. So it looks like, I think it's Aditya. It was the author. And it looks like this

00:02:10.800 --> 00:02:15.520
may have been a university project or something. I'm not quite sure, but I guess it doesn't matter.

00:02:15.520 --> 00:02:22.640
It's a pretty cool article. So he used a Kaggle information that went, that used all the projects

00:02:22.640 --> 00:02:29.440
up through 2018, I think. So it's not, it's not up through today, but that's pretty big data set.

00:02:29.440 --> 00:02:35.560
There's like 370 plus thousand projects in the data set. So that's neat. Came from Kaggle.

00:02:35.560 --> 00:02:41.340
And then the article goes through using pandas data frames to explore the data using describe,

00:02:41.340 --> 00:02:46.060
describe, which is a cool thing for the data frames have to just learn. You can learn quite a bit about

00:02:46.060 --> 00:02:52.160
your data just with describe. But then he goes on and uses matplotlib and Seaborn to analyze the data

00:02:52.160 --> 00:02:57.660
further. And I really, I kind of really liked that. I've seen articles like this before of how to use

00:02:57.660 --> 00:03:03.620
pandas and stuff and graphics to explore data. But this is data I actually really kind of cared about

00:03:03.620 --> 00:03:09.060
learning about Kickstarter. I may want to go back and, and use some of the, some of the techniques

00:03:09.060 --> 00:03:14.980
that he talked about in this article to kind of explore it more. I got to point out, there was a

00:03:14.980 --> 00:03:21.300
interesting line in there that said the data set goes back, has a 1970 listing. And it said the data

00:03:21.300 --> 00:03:28.020
from 1970 seems to be bad or insignificant data. I wasn't sure if this was just like a misunderstanding

00:03:28.020 --> 00:03:33.260
of when Kickstarter started or a joke, but yeah, it wasn't around in 1970.

00:03:33.260 --> 00:03:36.500
That's not when the song kickstart my heart came out, is it?

00:03:36.500 --> 00:03:37.680
Oh, I don't know.

00:03:37.680 --> 00:03:40.420
That was Motley Crue, but I think that was like late eighties.

00:03:40.420 --> 00:03:40.900
Yeah.

00:03:40.900 --> 00:03:42.240
Yeah.

00:03:42.240 --> 00:03:42.900
Yeah.

00:03:42.900 --> 00:03:43.180
Yeah.

00:03:43.180 --> 00:03:49.340
You know, there's a bunch of punchlines. One of the punchlines is 30, about 35% are successful,

00:03:49.340 --> 00:03:53.080
although they describe success as meeting the goal.

00:03:53.640 --> 00:03:54.640
And one of the things-

00:03:54.640 --> 00:03:55.040
Right, it's funded, right?

00:03:55.040 --> 00:03:55.400
Yeah, it's funded.

00:03:55.400 --> 00:03:57.500
Not necessarily shipped, delivered the product, right?

00:03:57.500 --> 00:04:01.920
Yeah. Well, I'm not sure. But one of the things I love about Kickstarter is the feedback. So I

00:04:01.920 --> 00:04:08.120
personally think that a failed Kickstarter is also a success because people, people learn that there's

00:04:08.120 --> 00:04:13.320
not enough demand to push forward. So that's information and that's successful too. But,

00:04:13.320 --> 00:04:14.960
you know, maybe I'm just an optimist.

00:04:14.960 --> 00:04:21.100
There's a lot of research that's been done on like the idea of Kickstarter and how now Kickstarter is almost

00:04:21.100 --> 00:04:28.100
80% marketing and 20% product idea. There have been Kickstarters that have failed, that have

00:04:28.100 --> 00:04:33.440
retried on Kickstarter with a different marketing approach and like wildly succeeded.

00:04:33.440 --> 00:04:34.360
So interesting.

00:04:34.360 --> 00:04:39.680
It would be interesting to see like out of the ones that did succeed, like how many of them had videos,

00:04:39.680 --> 00:04:45.180
like how long were their posts? Because I think a lot of times people want to jump on these projects

00:04:45.180 --> 00:04:50.080
like, hey, fund me, please, please give me money. And it's like, you almost have to do a little bit

00:04:50.080 --> 00:04:54.540
more work than that to even get to the bare minimum opportunity of success.

00:04:54.540 --> 00:04:59.040
I did a lot of research on Kickstarter success and failure and stuff in the early days. And yeah,

00:04:59.040 --> 00:05:03.960
it's, there's a whole thing that you don't see about getting the word out about if you get a high

00:05:03.960 --> 00:05:08.000
enough growth in the early days, Kickstarter will feature you. Like my first one, when I launched

00:05:08.000 --> 00:05:17.840
Talk Python training, it became for like two weeks, my Python course was the number one software product

00:05:17.840 --> 00:05:23.720
on Kickstarter. And we got like 40% of the people who bought the course discovered it on Kickstarter,

00:05:23.720 --> 00:05:27.620
not because I told them about it or someone else told them about it. But the reason it got there is

00:05:27.620 --> 00:05:32.580
the podcast, the podcast listeners who heard about it all went and quickly funded it. And so it,

00:05:32.580 --> 00:05:38.080
Kickstarter saw like this trajectory of going up and yeah, it worked well.

00:05:38.300 --> 00:05:43.260
I think that's good information though. Also, I mean, that's, yes, it's marketing, but yes,

00:05:43.260 --> 00:05:48.560
selling a product is also marketing. It's also having a platform to tell people about it. It's,

00:05:48.560 --> 00:05:53.780
um, you can't really sell stuff into a vacuum and expect to make money. So yeah.

00:05:54.040 --> 00:05:58.200
One really final interesting thought, if people are kind of interested in Kickstarter, there's a

00:05:58.200 --> 00:06:03.960
fantastic movie. One of my favorite documentaries of all time called capital C capital, the letter C,

00:06:03.960 --> 00:06:11.900
the movie you search for that. It's like, it's in 19, not 2015, following people around who got funded.

00:06:11.900 --> 00:06:17.020
And like when Kickstarter was all the brand new rage and it's just super cool to see those people go

00:06:17.020 --> 00:06:18.140
through there. It's, it's amazing.

00:06:18.140 --> 00:06:18.840
I'll check it out.

00:06:18.900 --> 00:06:25.340
But you know, what was not super commonly used back then, at least compared to now is using GPUs

00:06:25.340 --> 00:06:30.100
for machine learning and high end computation. Like that's a pretty new thing, right? Not brand new,

00:06:30.100 --> 00:06:31.780
but it's definitely gaining momentum.

00:06:31.780 --> 00:06:32.760
Yeah. Let's hear about it.

00:06:32.760 --> 00:06:38.800
All right. So often you hear about, Oh, you can just do like PI CUDA this and CUDA that. And CUDA

00:06:38.800 --> 00:06:44.120
means NVIDIA. CUDA is not a general thing. So when something says you can do this cool machine

00:06:44.120 --> 00:06:50.760
learning on GPUs with CUDA. And then I look at my MacBook pro here that has an AMD, I don't know,

00:06:50.760 --> 00:06:58.520
560, whatever graphics card in it. Nope. Don't get to do CUDA. No CUDA. I actually do have a gaming

00:06:58.520 --> 00:07:04.640
sim racing computer that has like a NVIDIA card if I really wanted to. But the point is like a lot of

00:07:04.640 --> 00:07:11.220
these laptops and other machines don't have some way to run NVIDIA stuff on them. Right. And that's,

00:07:11.220 --> 00:07:15.920
you know, that takes the wind out of the sails of a lot of data science and computational projects.

00:07:15.920 --> 00:07:16.180
Yeah.

00:07:16.180 --> 00:07:24.340
Unless you could bring in the Vulcans. So there's an article which talks about an open source set of

00:07:24.340 --> 00:07:30.920
libraries, I guess. Articles entitled GPU accelerated Python for machine learning on cross vendor graphics

00:07:30.920 --> 00:07:32.600
cards. That's pretty cool. Yeah.

00:07:32.660 --> 00:07:39.360
And so apparently it uses this project called Vulcan compute, the Vulcan compute Python framework.

00:07:39.360 --> 00:07:47.100
And the idea is that a lot of the modern machine learning libraries like Google TensorFlow,

00:07:47.100 --> 00:07:53.920
Facebook's PyTorch, a bunch of others, they've all been adopting Vulcan, which is a C++ library,

00:07:54.180 --> 00:08:02.060
as their cross platform GPU SDK. So that means, yeah, I can do it on my computer or I don't have

00:08:02.060 --> 00:08:06.980
to have NVIDIA or whatever. Right. So that's really awesome. However, they say, you know, in order to use

00:08:06.980 --> 00:08:14.160
this Vulcan library is 500 to 2000 lines of C++ code just to get like the boilerplate set up.

00:08:14.520 --> 00:08:18.900
As a Python developer, that strikes me as a lot. And how do you feel, Jay? Does that seem like a lot?

00:08:18.900 --> 00:08:21.000
Yeah, that's a hard pass on my part.

00:08:21.000 --> 00:08:22.280
Yeah, exactly.

00:08:22.280 --> 00:08:26.120
Well, you kind of have like a thousand lines of code just for a print statement. So

00:08:26.120 --> 00:08:33.120
exactly. Yeah. Like that's all the header files and all. So then there's the compute Python package,

00:08:33.120 --> 00:08:40.920
which is built on top of the Vulcan SDK using C++ bindings. And that thing is nice and simple.

00:08:40.920 --> 00:08:46.200
And it's a GPU framework, a general purpose graphics processing unit framework, I guess,

00:08:46.200 --> 00:08:52.340
is the acronym police there. And so if you're interested in building stuff for GPUs and you

00:08:52.340 --> 00:08:58.200
don't want to be tied to CUDA cores, then check out this compute Python package. It sounds pretty cool.

00:08:58.200 --> 00:09:04.160
Yeah. Except for the logo looks like it was like designed in 1983 or something.

00:09:05.460 --> 00:09:11.360
You know what? Maybe hold on, hold on, hold on. I think there's a little animation,

00:09:11.360 --> 00:09:19.020
like the Cylon type animation here for the animated GIF with the Python. And it has like ray tracing

00:09:19.020 --> 00:09:22.160
reflections of the logos. Oh, I kind of dig it, man.

00:09:22.160 --> 00:09:24.160
Well, okay. Yeah. It's a little video.

00:09:24.160 --> 00:09:26.040
Jay split the vote here. Come on. What's it going to be?

00:09:26.040 --> 00:09:30.780
They're probably using all of their GPU power to do something in the background,

00:09:30.780 --> 00:09:32.880
which is why they couldn't come up with a good logo.

00:09:32.880 --> 00:09:37.180
It sounds like a useful framework that people could talk about. And the article talks about,

00:09:37.180 --> 00:09:41.080
walks you through some examples of using it and stuff. I'm not going to go in the details there,

00:09:41.080 --> 00:09:43.140
but yeah, pretty neat.

00:09:43.140 --> 00:09:48.460
I like that this is mobile enabled too. So you can, you can take some of your work on the go.

00:09:48.460 --> 00:09:52.140
Yeah. Quite cool. Put it on your small devices. Quite neat.

00:09:52.140 --> 00:09:52.500
Yeah.

00:09:52.500 --> 00:09:54.900
Speaking of small devices, Jay.

00:09:55.120 --> 00:09:59.380
Oh, you stole my segue. I was going to say we could use some Vulcan technology to open up a portal,

00:09:59.380 --> 00:10:01.900
but we could, what kind of portal?

00:10:01.900 --> 00:10:07.500
A pie portal at that. So my pick, we're getting closer to the holiday season, which

00:10:07.500 --> 00:10:11.540
I can't believe I'm the one that's saying that normally I'm the one that gets angry when

00:10:11.540 --> 00:10:19.960
people talk about Christmas before Thanksgiving. But yeah, I received a little gift from Santa pie.

00:10:21.040 --> 00:10:25.640
And from there, I thought this would be a great gift for the tinkering Pythonista.

00:10:25.640 --> 00:10:31.140
And it is a pie portal, which I'm actually glad we're live streaming this because I can kind of

00:10:31.140 --> 00:10:31.600
show it off.

00:10:31.600 --> 00:10:32.220
Yeah.

00:10:32.220 --> 00:10:32.980
Oh, nice.

00:10:32.980 --> 00:10:37.640
Oh yeah. So when I think of like circuit Python and these devices, like it's usually just little

00:10:37.640 --> 00:10:41.220
chips and maybe you've got an led you can make blink, but that's like a screen.

00:10:41.220 --> 00:10:48.340
This is like all of the little things that we think about when we think of circuit pie on one device. So

00:10:48.340 --> 00:10:55.560
it has a touchscreen. So not just a regular screen, it's a touchscreen. It has the actual IO that's

00:10:55.560 --> 00:11:00.620
running right now as a light sensor. So there's a little sensor on the side that if I cover it up,

00:11:00.620 --> 00:11:04.320
you probably can't see it, but the numbers will actually start changing. There we go.

00:11:04.320 --> 00:11:05.480
Oh yeah. Yeah.

00:11:05.600 --> 00:11:10.900
And of course, since it's running circuit pie, it is like the easiest thing in the world to,

00:11:10.900 --> 00:11:19.040
to work with because at its core foundation, it's just Python and it's a limited scope of Python. So

00:11:19.040 --> 00:11:22.880
you kind of have to figure out, you know, what you're importing, what you're exporting. But

00:11:22.880 --> 00:11:31.180
I was able to display my light sensor output in 20 lines of code and five of those were import

00:11:31.180 --> 00:11:36.560
statements. So about 15 lines. That's pretty awesome. And I've seen some pretty cool projects

00:11:36.560 --> 00:11:43.280
with it. So what's the, graphics programming language look like? Is it like draw text? Is it

00:11:43.280 --> 00:11:52.260
draw pixel? No, actually it's, it's really interesting because of like, they have like actual pie portal

00:11:52.260 --> 00:11:56.540
module that you can import. And from there you actually load the screen and you can display

00:11:56.540 --> 00:12:02.320
full images on. So what you would do is you'll set your background almost like how the old Atari

00:12:02.320 --> 00:12:05.880
systems, you would come like with these paper backgrounds and then you would just overlay

00:12:05.880 --> 00:12:09.940
your actual game data over it. You kind of do that with this.

00:12:09.940 --> 00:12:12.300
It's like a 2d layered sprite type thing almost.

00:12:12.300 --> 00:12:20.320
Exactly. You load up like a small bitmap onto the screen and then you just tell your text where you

00:12:20.320 --> 00:12:25.480
want it to be placed. And I've seen people do like weather sensors. I actually did a thing with

00:12:25.480 --> 00:12:29.980
like Twitter lists so I could check and see like which Twitter lists that I follow for work or

00:12:29.980 --> 00:12:35.960
like having to have the most traffic. You can also throw some audio on there has built in speaker. So

00:12:35.960 --> 00:12:43.260
we played some practical jokes on, on relatives by having this, having it randomly every few seconds,

00:12:43.260 --> 00:12:48.300
just shout names and they didn't know where it was coming from. So, that's always fun.

00:12:48.380 --> 00:12:49.860
That looks really cool. Do you know what it costs?

00:12:49.860 --> 00:12:51.600
I want to say it's 50 bucks.

00:12:51.600 --> 00:12:58.220
Yeah. So not too expensive of a thing. Oh, that's a nice one. I like it. I'm still looking for that

00:12:58.220 --> 00:13:04.320
good use case where I can make some use out of some of these little devices. I think as somebody that

00:13:04.320 --> 00:13:09.080
does a lot of recording, I really want something that I can put on my door that is have like a sign

00:13:09.080 --> 00:13:12.080
like recording, please don't open up and yell and ask if I'm recording.

00:13:12.280 --> 00:13:18.980
That was the game plan, but I need to get a case for it. And this is actually why a wifi enabled. So

00:13:18.980 --> 00:13:25.520
if you are pulling data in, you can, tap into the add a fruit API and they give you your own little

00:13:25.520 --> 00:13:30.180
dashboard. You can store data there to retrieve later. You can pull up data from it. It has its

00:13:30.180 --> 00:13:36.420
own request library. So you can actually pull stuff down from the web. And, that was actually my game

00:13:36.420 --> 00:13:43.500
plan too, was to say, all right, have some little server on my Mac that whenever I open up, you know,

00:13:43.500 --> 00:13:48.960
zoom or Skype or something like that, it changes the status to now recording. And then like,

00:13:48.960 --> 00:13:53.520
because this is wireless, it would just pick up that signal and change on the door.

00:13:53.520 --> 00:13:58.120
Yeah. Maybe some serverless function thing where you talk to a database that literally has one entry

00:13:58.120 --> 00:14:03.640
recording or not, you just push it up there and it's all good to go. Awesome. I'm pretty sure this is

00:14:03.640 --> 00:14:08.420
going to exist for at least one of us someday, right? Like it seems like such a nice thing to

00:14:08.420 --> 00:14:12.580
have. Yeah, we should do it. Even all this COVID work from home stuff. Like you've seen those videos

00:14:12.580 --> 00:14:18.340
of like kids being like crawling in and mom's dragging the kid back out. Like, okay. So maybe it doesn't

00:14:18.340 --> 00:14:21.960
work for a two-year-old, but still it would be nice. So Brian, I'm not the only one with machine

00:14:21.960 --> 00:14:26.780
learning here. What do you got? Well, we've got, yeah. So I guess this is a machine learning stuff.

00:14:26.780 --> 00:14:31.520
We've got an introduction to linear, an article called introduction to linear algebra

00:14:31.520 --> 00:14:38.400
for applied machine learning with Python. Now I do want to do some machine learning in the future and

00:14:38.400 --> 00:14:42.660
definitely, and that's the target for this article. But you still got to learn about it.

00:14:42.660 --> 00:14:51.280
Sorry, Clyde. That was bad. It was very bad. Actually, I use, we use linear, linear algebra is used for

00:14:51.280 --> 00:14:56.820
communication systems as well. And so I kind of would like to brush up on my linear algebra. I didn't,

00:14:56.820 --> 00:15:03.560
it was a long time ago when I took it in college. So this article is from Pablo Ciceras and

00:15:03.560 --> 00:15:08.840
it's a big article. He says it's intended as a reference and not a comprehensive review.

00:15:08.840 --> 00:15:11.440
However, it's a really big reference.

00:15:11.440 --> 00:15:13.520
This is a book. It has an epilogue.

00:15:13.520 --> 00:15:20.900
Yeah, it is a book, but there's also links. He includes links to both free and paid resources that

00:15:20.900 --> 00:15:25.720
where he suggests learning linear algebra, including some video classes that are free,

00:15:25.720 --> 00:15:31.800
which would be neat. But anyway, I think the level that he's got this is really just right for me.

00:15:31.800 --> 00:15:38.740
And he talks about sets and ordered pairs and relations and functions, then gets into vectors

00:15:38.740 --> 00:15:45.460
and matrices and, and mappings and matrix decomposition. So he gets pretty deep into the linear algebra.

00:15:45.920 --> 00:15:50.880
And in some of the examples, he's got diagrams and stuff, which help, help me learn the visuals.

00:15:50.880 --> 00:16:05.100
And, he's using NumPy, pandas and Altair for some of the examples. And, I think that's pretty cool to show not only kind of how you do this, how you use linear algebra or really what it is.

00:16:05.100 --> 00:16:12.960
And then how to apply those, principles with NumPy and, show the examples with Python. It's really kind of nice.

00:16:12.960 --> 00:16:16.560
So anyway, top, it's a really useful thing for me.

00:16:16.560 --> 00:16:17.040
That's cool.

00:16:17.040 --> 00:16:21.860
Your linear algebra, it's one of these weird things that like appears in places that you don't expect it.

00:16:21.860 --> 00:16:27.800
It was definitely one of my favorite parts of my math studies is the, like the advanced linear algebra stuff.

00:16:28.040 --> 00:16:35.980
But like in 3D computer graphics, the way you rotate, like the viewport and stuff is you just multiply everything by like a rotation matrix.

00:16:35.980 --> 00:16:39.320
Or if you move something, you multiply it by a matrix or you make it bigger or smaller.

00:16:39.320 --> 00:16:44.900
Like there's just all these crazy applications of linear algebra. so yeah, it seems pretty neat.

00:16:44.900 --> 00:16:57.180
Yeah. A lot of the, it comes up a lot in, like you said, with, with graphics also with, changing, well, really anything where you've got like massively parallel systems can be described as a linear algebra problems.

00:16:57.180 --> 00:17:07.640
Yeah. Very nice. Next up, I want to talk about a new notebook framework. We seem to be catering to the data science crowd or scientific computing crowd this, this time around, but not always.

00:17:07.640 --> 00:17:18.360
So I recently did a show with Philip Guo and Sam and we talked about, I think it was 60 different notebook frameworks.

00:17:18.360 --> 00:17:28.300
It was, Sam Lau and Philip Guo back on episode 268. So, you know, you think Jupyter and now, is there something else? Oh, there's that Google Colab thing.

00:17:28.300 --> 00:17:29.140
60.

00:17:29.140 --> 00:17:31.660
Well, 60 different things.

00:17:31.660 --> 00:17:32.080
Wow.

00:17:32.220 --> 00:17:36.460
Yeah. And 61 now, because there's another one called deep note.

00:17:36.460 --> 00:17:36.780
Okay.

00:17:36.780 --> 00:17:37.860
Jay, have you heard of deep note?

00:17:37.860 --> 00:17:44.700
I have actually, I'm kind of upset because this was going to be one of my picks, but I hadn't used it yet.

00:17:45.240 --> 00:17:58.560
I was looking at it for a lightning talk that I gave last week and I was like, Oh, this is so cool. Too bad. I don't have anyone to collaborate with on this project. Otherwise I would have tried it. So you beat me to it.

00:17:58.620 --> 00:18:12.740
I sniped. Yeah. I got it out of there. Yeah. So deep note is an interesting one. It's Jupyter compatible, like many of the other ones that I sort of indirectly referenced there, but not exactly Jupyter. It's not like it just runs in Jupyter or JupyterLab or something.

00:18:13.300 --> 00:18:29.460
So it's, I'm pretty sure like that means import export from Jupyter. And then it runs in the cloud, which is kind of cool. A lot of times it's a hosted thing. So you have to maybe pay for it, depending on how you use it. It's free for individuals. But if you're on a team or you're in a company, it's going to cost some money.

00:18:29.460 --> 00:18:57.860
And like Jay was hinting at the main feature of it is real time collaboration, not like just the Jupyter stuff, but you know, let's log in and work on this together and start typing and start reviewing. It has some cool features. Like it has code review within the notebook coming. It has built in version control coming, obviously the real time collaboration that I talked about. And it even has dashboards kind of like streamlet coming soon. So you can like turn a notebook into an interactive dashboard website.

00:18:57.860 --> 00:19:24.640
I'm really excited for the code review stuff. I think that that's something that as Python itself is becoming more and more and more a tool for people outside of the traditional developer space, we still need to have good review tools. And even just a matter of having the ability to do collaboration and say, Hey, can you take a look at this code? And then you can actually see it running instead of just imagining what it's going to do.

00:19:24.860 --> 00:19:38.940
I think adding version tracking, adding code review. That's just the next step to really teach some of the fundamentals of developer work to skill sets that aren't traditionally designed to work that way.

00:19:38.940 --> 00:20:07.580
Yeah. And so much of the Jupyter computation data exploration comes from an individual working on the thing. Like Jupyter notebooks are not particularly friendly to version control, like GitHub. Like every time you make a change, or just the output changes, it clashes in GitHub and things like that. There's like a merge conflict and all those sorts of things. So it can be a challenging. So I think you're right. Like moving to a more collaborative, like sort of Google Docs style of world makes a lot of sense, not for everyone, but for many people.

00:20:07.580 --> 00:20:21.120
Yeah, I'm curious if something like this might be useful for like, say, instructor sort of thing. So you tutor somebody by two people hopping on a on one of these collaborations and working through a problem.

00:20:21.120 --> 00:20:25.780
Yeah, looks cool. Jay, what's this last one you got here? You and I've talked a bit about this offline.

00:20:25.780 --> 00:20:55.760
We have this is a tool that I found working on my own blog. It's called image kit. And I'm sure everyone here, you know, listening might or has a good idea of what a CDN is. And the too long didn't read part of it is they also make CDN specifically for images. So you can actually store your images on something like S3 storage, point this CD into it. And instead of calling that S3 storage, you would just call your CDN.

00:20:55.760 --> 00:21:13.700
URL. And I mean, this is great because you can do things like compression, you can do responsive types and different sizes. But the thing that about image kit that I really liked was that it also does a little bit of machine learningness, like image magic behind the scenes.

00:21:13.760 --> 00:21:30.820
So of course, you can do your own scaling of these images, but you can also do smart cropping. So if you take a picture of your face, and you say, I want the focal point of this image to be my face, you can crop it around your face and not just around the center of the image, which I think is a really good idea.

00:21:30.820 --> 00:21:42.780
Oh, that's cool. That's great. Like if you had a site where you're accepting like user profile images, or people were posting stuff, you could say, emphasize this, and they don't have to know, how do I crop an image? And why won't it accept a BMP?

00:21:42.780 --> 00:22:12.760
Yeah, it's just here.

00:22:12.760 --> 00:22:42.740
I can just say, here's the URL, here's the text that I want. And of course, because this is Python bytes, it has a Python API, it actually has a ton of API. So like, they have like first party API's for most of the primary languages. But if you don't have time to play with the API, you don't have a way to access the API before you render your page. It also has a URL schema. So you can also give all of those commands directly into the URL itself. And it's pretty cheap.

00:22:42.740 --> 00:22:58.540
I mean, right now, I'm not paying for it at all, just using their free tier. But if you want things like a custom domain name, we can say images dot Python bytes, or something else. That's when you start having to look at it. But I think even then, it's not for an image CD. And it's not too bad.

00:22:58.740 --> 00:23:20.400
Yeah, that's cool. And you can put like resizing in there. Just like I want this size to be such and such. That's important for like Google page speed, especially on mobile devices. If you want to put like a 2000, whatever 2000 by whatever picture, you don't want to just show that directly, right? So you can just make it part of the URL, even do like responsive design, like use different URLs for different screen media queries and stuff.

00:23:20.400 --> 00:23:32.560
It also supports fuzzy or lazy loading, which is really cool to where you can get like a blurred image until it finishes rendering the entire site. And then once it's done the entire site, it'll go back and then load the high def image.

00:23:32.560 --> 00:23:33.240
Oh, nice.

00:23:34.380 --> 00:23:35.100
Yeah, this is cool.

00:23:35.100 --> 00:23:40.060
I like it. And you mentioned your podcast, like tell people real quick, your podcast.

00:23:40.060 --> 00:23:54.560
Oh, sure. Yeah. So I do a weekly show called the pit show. Pit is short for productivity and tech. It's been around for a few years. I think once upon a time on some RSS feed far, far away, I had Michael Kennedy on the show.

00:23:54.560 --> 00:23:55.360
That was fun.

00:23:55.360 --> 00:24:00.780
I think I'm still trying to get that Brian fellow on there as well. But I'm sure we'll make that happen at some point.

00:24:00.780 --> 00:24:02.860
I thought we already did that. We haven't done that yet.

00:24:03.520 --> 00:24:32.660
Never did. But I blame my schedule. So it's okay. I guess as a developer advocate now, I get a lot of questions about, you know, hey, what's your journey in tech? How did you do this? Where did you get these things? What's it like, you know, not just for you, but for your family and other things like that. So it's a combination of two things. One, it's my walk through this journey out loud, showing people what I'm going through, some of the things that I'm doing, some of the things that I'm playing with, practicing on, but also interviewing folks from around.

00:24:32.660 --> 00:24:42.380
interviewing folks from around the internet, from all sorts of disciplines and asking the questions because I can, because I have them on my show for 30 minutes at a time.

00:24:42.380 --> 00:24:44.040
Yeah, that's awesome.

00:24:44.040 --> 00:24:44.660
Nice.

00:24:44.660 --> 00:24:58.420
Yeah, Brian, you got to get on there. We got to hear your story. So maybe that's, that was the last item. So maybe we should just roll into the extras. Jay, you want to keep going? You said you were a developer advocate now. Congratulations. That's an exciting new role. You just got, right?

00:24:58.420 --> 00:25:11.500
Yeah, been at that for a few months now, really enjoying it. And of course, because I'm doing this in the middle of the day, I'm going to take this opportunity to promote two of the things that I've been doing a lot, which are our contributor program.

00:25:11.640 --> 00:25:23.760
I work for Elastic, the company behind Elasticsearch. We also are responsible for Logstash and Kibana. I think that was how I got, I snuck onto this show is because I messaged Mike after he said that Elasticsearch wasn't a real database.

00:25:24.260 --> 00:25:39.100
So shots fired. But then from there, yeah, if you're doing anything with Elasticsearch, Kibana, Logstash, Beats, even some of our Python specific clients, we have a contributor program. If you do a blog post video tutorial, let us know.

00:25:39.100 --> 00:25:49.020
We have a whole platform. There's a link here in the show notes. And if you do enough of it, we actually give you credits to Elastic Cloud. So you can host some of your projects for free.

00:25:49.440 --> 00:26:13.920
And then also we have our YouTube channel, the Elastic Community YouTube channel, where you can see meetup talks, lightning talks. I just, the lightning talk I talked about earlier in the show is on there as well. You've got a lot of great folks that are teaching and sharing that information. And here's a single point where you can go and you can watch hours and hours of good information and good content on it.

00:26:13.920 --> 00:26:17.760
Awesome. That's really cool. And people are in Elasticsearch. They should definitely check that out.

00:26:17.760 --> 00:26:18.440
Yeah, definitely.

00:26:18.440 --> 00:26:34.720
So, Michael, I would just bring up, I've been plugging away at testing code at testingcode.com. That's a podcast I do. But I think I'm going to try to change the direction a little bit. So since I really like this short format.

00:26:34.720 --> 00:26:36.840
Oh, look what Jay has.

00:26:36.840 --> 00:26:38.160
In reach.

00:26:38.160 --> 00:26:39.420
Always.

00:26:39.420 --> 00:26:42.820
Do it again, but you got to say something so that you get on the video thing.

00:26:42.820 --> 00:26:50.560
If you like testing code, you should totally check out this book. It's called Python Testing with pytest. It's by this Brian Okken.

00:26:50.560 --> 00:26:52.500
I thought that was how to build rockets with Python.

00:26:52.500 --> 00:27:10.800
At first I was like, man, he needs to talk to those PyTorch characters, you know, maybe they can help him, you know, blast off or something. But no, I really, I genuinely say this is probably the most opened book that I have, like, within reach of me, because I'm always screwing up testing.

00:27:11.340 --> 00:27:16.560
And luckily, I don't have to message Brian every five minutes on how do I do this. I can just use his words.

00:27:16.560 --> 00:27:19.260
I don't need any extras more than that. So thanks, Jay.

00:27:19.260 --> 00:27:21.360
Well, you said you changed your direction. What's your direction?

00:27:21.360 --> 00:27:31.320
I kind of want to hear what people would like to do. I was thinking about possibly doing shorter episodes or more focused, like maybe 10 minute episodes about individual topics.

00:27:31.320 --> 00:27:35.900
But I kind of like to hear from other people about what they'd like to hear. So yeah, just open it up.

00:27:35.900 --> 00:27:40.880
I love a podcast only about mocking, because that's just the one thing that no one understands.

00:27:40.880 --> 00:27:42.660
That's because nobody should do it.

00:27:42.660 --> 00:27:51.660
Hey, how am I going to fix my dependency inversion and inversion control stuff in my Java app without some mocking? Come on.

00:27:52.160 --> 00:27:54.460
Well, yeah. With Java, you might need it.

00:27:54.460 --> 00:28:03.360
All right. I've got a few things. One, my Apple M1 chip, Silicon Apple Mac mini weight continues.

00:28:03.360 --> 00:28:12.240
But eventually, I will give you all. It's like mid-December. Eventually, I'll give you all of like the state of Python on Apple M1 chips.

00:28:12.440 --> 00:28:24.380
But until I know that, I can't share it. So over at Talk Python Training, we are running, we're participating in the Python Software Foundation fundraiser to close out the year.

00:28:24.380 --> 00:28:29.560
So because of time travel, that is not announced. That's probably not even known yet.

00:28:29.560 --> 00:28:33.760
But at the time of the release of this, it should be out. It starts December 1st.

00:28:34.180 --> 00:28:41.080
So if you visit pythonbytes.fm/PSF 2020, right now, it's going to go to a page that says nothing yet.

00:28:41.080 --> 00:28:45.820
But I'm going to change that redirect to end on the right place when it goes live.

00:28:45.820 --> 00:28:49.120
So there's going to be some discounts on some of our courses.

00:28:49.120 --> 00:28:57.160
Half of all the payments will go like half of the revenue, not profits, half the revenue will go to fund the PSF.

00:28:57.160 --> 00:29:04.160
So I teamed up with the PSF team and a couple other folks like RealPython and Dan Bader over there.

00:29:04.160 --> 00:29:07.620
And a few others to try to, you know, give some money to PSF.

00:29:07.620 --> 00:29:09.020
Keep them going strong.

00:29:09.020 --> 00:29:12.880
And last but not least, trying something new as podcasters.

00:29:12.880 --> 00:29:14.880
You guys can tell me what you think of this idea.

00:29:14.880 --> 00:29:19.960
I wanted to give something back to the people that supported the training course the most and the podcast the most.

00:29:19.960 --> 00:29:25.780
So I launched this thing called Talk Python To Me Pro Edition, which basically means it just has no ads.

00:29:25.780 --> 00:29:30.300
And it has all the history of like, you know, back five years worth of shows in the podcast player.

00:29:30.300 --> 00:29:34.800
So anyway, people can check that out as well at talkpython.fm/pro.

00:29:34.800 --> 00:29:38.580
And yeah, anyway, that's kind of fun to put together.

00:29:38.580 --> 00:29:40.540
And those are all my items, I think.

00:29:40.540 --> 00:29:41.600
Yeah, let's do a joke.

00:29:41.600 --> 00:29:42.280
Oh, man.

00:29:42.280 --> 00:29:43.180
All right.

00:29:43.180 --> 00:29:44.420
You ask the question.

00:29:44.420 --> 00:29:45.220
I'll do the answer.

00:29:45.220 --> 00:29:45.680
Okay.

00:29:45.680 --> 00:29:49.080
Why can't SQL and NoSQL developers date one another?

00:29:49.080 --> 00:29:49.660
I don't know.

00:29:49.660 --> 00:29:50.060
It's rough.

00:29:50.060 --> 00:29:52.780
I guess because they don't agree on relationships.

00:29:52.780 --> 00:29:54.300
It's so bad.

00:29:54.300 --> 00:29:55.020
It's so bad.

00:29:55.020 --> 00:30:00.560
Jay, as a professional at a database company, how do you feel about this?

00:30:00.560 --> 00:30:10.100
I would have said because date time formatting is hard, but I can definitely vouch for this.

00:30:10.100 --> 00:30:12.920
But even though they can't date, they can still get along.

00:30:12.920 --> 00:30:14.560
They can still get along.

00:30:14.560 --> 00:30:15.540
They still have ETL.

00:30:15.540 --> 00:30:16.480
Come on.

00:30:16.480 --> 00:30:21.340
To close this out, I'll post the video of the live stream here once it gets recorded and saved.

00:30:21.340 --> 00:30:23.060
So maybe we'll do this again.

00:30:23.060 --> 00:30:24.880
People can let us know if they think that's a cool idea.

00:30:24.880 --> 00:30:30.120
And if people are wondering why I'm at a weird angle in the dark, it's because the power in my neighborhood went out.

00:30:30.120 --> 00:30:31.620
I've been doing this show from my phone.

00:30:31.620 --> 00:30:32.360
So anyway.

00:30:32.360 --> 00:30:33.620
Nice.

00:30:33.620 --> 00:30:35.980
It won't always be like that.

00:30:35.980 --> 00:30:36.340
That's good.

00:30:36.340 --> 00:30:37.540
Well, thanks a lot.

00:30:37.540 --> 00:30:38.820
Thanks, Jay, for showing up.

00:30:38.820 --> 00:30:39.960
I enjoyed having you here.

00:30:39.960 --> 00:30:40.460
Thank you.

00:30:40.460 --> 00:30:41.540
Thank you for having me.

00:30:41.540 --> 00:30:42.080
All right.

00:30:42.080 --> 00:30:42.460
Thanks, Michael.

00:30:42.460 --> 00:30:43.180
Thanks, Brian.

00:30:43.180 --> 00:30:43.860
Bye.

00:30:43.860 --> 00:30:44.120
See you, everyone.

00:30:44.120 --> 00:30:46.100
Thank you for listening to Python Bytes.

00:30:46.100 --> 00:30:48.560
Follow the show on Twitter at Python Bytes.

00:30:48.560 --> 00:30:51.600
That's Python Bytes as in B-Y-T-E-S.

00:30:51.600 --> 00:30:54.480
And get the full show notes at Python Bytes.fm.

00:30:54.480 --> 00:30:59.560
If you have a news item you want featured, just visit Python Bytes.fm and send it our way.

00:30:59.560 --> 00:31:01.600
We're always on the lookout for sharing something cool.

00:31:01.600 --> 00:31:02.780
This is Brian Okken.

00:31:02.780 --> 00:31:08.080
And on behalf of myself and Michael Kennedy, thank you for listening and sharing this podcast with your friends and colleagues.