WEBVTT

00:00:00.001 --> 00:00:01.580
What's your favorite Python editor?

00:00:01.580 --> 00:00:04.760
That's one of the questions I always ask at the end of each episode.

00:00:04.760 --> 00:00:09.820
This week, I want to shine a light on a fantastic answer to that question for Windows developers.

00:00:09.820 --> 00:00:11.040
Visual Studio.

00:00:11.040 --> 00:00:13.820
On this episode, you'll meet Steve Dower,

00:00:13.820 --> 00:00:18.080
a Python core developer from Microsoft's Python Tools for Visual Studio team.

00:00:18.080 --> 00:00:19.940
He's here to tell us all about it.

00:00:19.940 --> 00:00:24.840
We also cover Python on Windows, Cpython, the 2016 Build Conference, and more.

00:00:25.220 --> 00:00:30.140
This is Talk Python To Me, episode number 53, recorded April 4th, 2016.

00:00:30.140 --> 00:00:54.800
Welcome to Talk Python To Me,

00:00:54.800 --> 00:00:59.940
a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities.

00:00:59.940 --> 00:01:02.020
This is your host, Michael Kennedy.

00:01:02.020 --> 00:01:04.020
Follow me on Twitter, where I'm @mkennedy.

00:01:04.020 --> 00:01:07.900
Keep up with the show and listen to past episodes at talkpython.fm,

00:01:07.900 --> 00:01:10.500
and follow the show on Twitter via at Talk Python.

00:01:10.500 --> 00:01:14.900
This episode is brought to you by SnapCI and OpBeat.

00:01:14.900 --> 00:01:19.580
Thank them for supporting the show on Twitter via snap underscore CI and OpBeat.

00:01:19.580 --> 00:01:21.500
Steve, welcome to the show.

00:01:21.500 --> 00:01:22.720
Hi, Michael. Thanks for having me.

00:01:22.720 --> 00:01:24.940
Yeah, we've got some really cool stuff to talk about.

00:01:24.940 --> 00:01:28.500
I'm super excited to talk about what you guys at Microsoft are up to

00:01:28.500 --> 00:01:32.380
with bringing Python into all of your major dev products,

00:01:32.380 --> 00:01:34.440
Visual Studio, Azure, those sorts of things.

00:01:34.440 --> 00:01:35.860
Yeah, no, it's really exciting.

00:01:35.860 --> 00:01:38.520
We've been working on a lot of this stuff for a number of years,

00:01:38.520 --> 00:01:41.280
and it's really hitting a point where it's starting to come together,

00:01:41.280 --> 00:01:42.920
and people are making good use of it.

00:01:42.920 --> 00:01:43.840
So it's very exciting.

00:01:44.060 --> 00:01:45.140
Yeah, I bet it is.

00:01:45.140 --> 00:01:46.920
And we're going to totally dig into that.

00:01:46.920 --> 00:01:49.180
But, like always, let's get started at the beginning.

00:01:49.180 --> 00:01:50.180
Tell me your story.

00:01:50.180 --> 00:01:52.500
How do you get into Python, programming, that sort of thing?

00:01:52.500 --> 00:01:57.840
So my first Python experience was I got a holiday job at a startup company

00:01:57.840 --> 00:01:59.200
that was doing medical devices.

00:01:59.200 --> 00:02:05.660
And they had this ridiculously complicated C++ app for controlling the device

00:02:05.660 --> 00:02:07.280
that was scriptable with Python.

00:02:07.280 --> 00:02:09.980
So my job was basically writing the Python scripts

00:02:09.980 --> 00:02:13.340
to control these medical devices while we were testing them.

00:02:13.340 --> 00:02:16.400
And then after that, I started grad school,

00:02:16.400 --> 00:02:18.940
and one of my supervisors said,

00:02:18.940 --> 00:02:21.760
hey, you should pick up all of this code that I've done previously

00:02:21.760 --> 00:02:22.580
and use some of that.

00:02:22.580 --> 00:02:24.280
And I kind of looked at him and said,

00:02:24.280 --> 00:02:26.580
is this going to help with your work?

00:02:26.580 --> 00:02:28.340
And he's like, yeah, yeah, of course it is.

00:02:28.340 --> 00:02:29.940
But that was all in Python.

00:02:29.940 --> 00:02:32.840
So at that point, I was neck deep in it

00:02:32.840 --> 00:02:35.720
and have not yet seen a reason to come out.

00:02:36.180 --> 00:02:38.600
Yeah, it's a really nice environment, isn't it?

00:02:38.600 --> 00:02:39.440
It's great.

00:02:39.440 --> 00:02:40.360
It's just so flexible.

00:02:40.360 --> 00:02:44.740
And it has so much power that users don't actually have to see

00:02:44.740 --> 00:02:45.700
in the code that they write.

00:02:45.700 --> 00:02:49.620
One of my favorite things is writing really complex libraries

00:02:49.620 --> 00:02:51.480
that look incredibly simple to use.

00:02:51.480 --> 00:02:54.960
And Python's magic, metaclasses, decorators,

00:02:54.960 --> 00:02:57.500
makes that just really nice.

00:02:57.500 --> 00:02:59.380
You can do a lot of stuff that people never actually see

00:02:59.380 --> 00:03:00.160
or have to know about.

00:03:00.160 --> 00:03:02.360
So you'd say that's kind of a different experience

00:03:02.360 --> 00:03:05.780
than if I was writing C++ with templates and multiple inherences

00:03:05.780 --> 00:03:06.860
and all that kind of stuff, right?

00:03:06.860 --> 00:03:09.160
C++.

00:03:09.160 --> 00:03:11.620
I actually put C++ in the same category.

00:03:11.620 --> 00:03:14.060
I quite like writing templates in C++, yeah.

00:03:14.060 --> 00:03:17.200
But it's definitely a different category from Java or C#

00:03:17.200 --> 00:03:20.340
where you just don't have the ability to hide so much

00:03:20.340 --> 00:03:23.520
of the implementation from what users get to see in the code.

00:03:23.520 --> 00:03:26.780
So the interfaces are a bit more restricted in those languages

00:03:26.780 --> 00:03:28.820
and you use what you get.

00:03:28.820 --> 00:03:29.500
Yeah, that's for sure.

00:03:29.500 --> 00:03:30.620
You work at Microsoft.

00:03:30.620 --> 00:03:32.960
You said you've been there like four years or so, right?

00:03:33.100 --> 00:03:34.320
Yep, coming up on four years,

00:03:34.320 --> 00:03:36.920
which means following our usual tradition,

00:03:36.920 --> 00:03:39.680
I need to provide four pounds of candy for everyone,

00:03:39.680 --> 00:03:43.560
which I'm sure my weight-conscious colleagues

00:03:43.560 --> 00:03:44.420
are not looking forward to,

00:03:44.420 --> 00:03:46.000
but I'll make them indulge.

00:03:46.000 --> 00:03:46.640
There you go.

00:03:46.640 --> 00:03:48.240
That would probably be easier to do

00:03:48.240 --> 00:03:50.980
if your job anniversary was around Halloween.

00:03:50.980 --> 00:03:52.620
The stores are stocked.

00:03:52.620 --> 00:03:53.040
Yes.

00:03:53.040 --> 00:03:54.540
With candy.

00:03:54.540 --> 00:03:57.320
Or just after and then get all the discounted stuff.

00:03:57.320 --> 00:03:57.880
Exactly.

00:03:57.880 --> 00:03:59.140
That'd be the best time.

00:03:59.140 --> 00:04:00.840
So how'd you get there?

00:04:00.840 --> 00:04:04.800
I actually got there through contributing to the Python Tools for Visual Studio

00:04:04.800 --> 00:04:05.840
that I'm working on now.

00:04:05.840 --> 00:04:10.160
That was one of the earliest open source projects to be done out of Microsoft.

00:04:10.160 --> 00:04:13.120
It was one of the very first to accept external contributions,

00:04:13.120 --> 00:04:14.640
and so I was contributing.

00:04:14.640 --> 00:04:17.380
And that led to an offer of an internship,

00:04:17.380 --> 00:04:20.200
and so they brought me out from Australia for three months.

00:04:20.200 --> 00:04:24.260
And the nicest three months of the year in Seattle are June, July, August,

00:04:24.260 --> 00:04:25.720
so they brought me for those three months

00:04:25.720 --> 00:04:27.420
and got to the end and said,

00:04:27.420 --> 00:04:28.260
what do you think?

00:04:28.260 --> 00:04:28.840
Do you want to stay?

00:04:28.840 --> 00:04:30.420
And I'm like, wow, it was beautiful weather.

00:04:30.420 --> 00:04:31.140
It was sunny.

00:04:31.140 --> 00:04:32.220
It wasn't too hot.

00:04:32.220 --> 00:04:33.080
This sounds great.

00:04:33.080 --> 00:04:33.840
Yeah, I'll come back.

00:04:33.840 --> 00:04:37.680
And so, yeah, I was contributing to an open source project

00:04:37.680 --> 00:04:40.880
that turned into a full-time job and a career

00:04:40.880 --> 00:04:43.160
writing open source projects at Microsoft.

00:04:43.160 --> 00:04:44.320
Yeah, that's really awesome.

00:04:44.320 --> 00:04:47.180
I think those months that I think, you know,

00:04:47.180 --> 00:04:48.800
I spend a lot of my time in Portland,

00:04:48.800 --> 00:04:51.660
and we have basically the same weather.

00:04:51.660 --> 00:04:54.020
Those are like the marketing months, right?

00:04:54.060 --> 00:04:56.300
People fall in love with the city and the surroundings then,

00:04:56.300 --> 00:05:00.020
and then the season of rain comes for the next six months.

00:05:00.020 --> 00:05:01.960
Yeah, it's a complete bait and switch.

00:05:01.960 --> 00:05:02.440
It is.

00:05:02.440 --> 00:05:06.200
But you know what's really good is you're not driven to go outside.

00:05:06.200 --> 00:05:07.900
You're not pulled to go out into the nice weather.

00:05:07.900 --> 00:05:10.020
You can just focus, do some programming for six months,

00:05:10.020 --> 00:05:11.640
and come back out when the sun shines.

00:05:11.640 --> 00:05:15.080
Yeah, and it's almost like they deliberately put the offices somewhere

00:05:15.080 --> 00:05:16.900
where people are going to stay in the office for longer.

00:05:16.900 --> 00:05:18.540
Yes, it is strange that way.

00:05:18.540 --> 00:05:19.360
Very nice.

00:05:19.400 --> 00:05:20.100
So that's great.

00:05:20.100 --> 00:05:22.060
I expect back in that time frame,

00:05:22.060 --> 00:05:26.040
not so many people were hired at Microsoft to write open source.

00:05:26.040 --> 00:05:29.500
I don't honestly know how many people were doing it at that time.

00:05:29.500 --> 00:05:30.700
There were not many.

00:05:30.700 --> 00:05:35.260
So my team worked really hard to get the Visual Studio support for Python

00:05:35.260 --> 00:05:38.260
to be written as an open source project,

00:05:38.260 --> 00:05:40.480
and many, many meetings with lawyers.

00:05:40.480 --> 00:05:43.640
I mean, these days, to release something under the MIT license

00:05:43.640 --> 00:05:46.080
or the Apache license is really, really easy.

00:05:46.180 --> 00:05:49.680
But at that point, they spent months dealing with lawyers,

00:05:49.680 --> 00:05:51.820
explaining what everything meant,

00:05:51.820 --> 00:05:55.240
letting the lawyers do their research and find their backgrounds

00:05:55.240 --> 00:05:56.100
and just figure out,

00:05:56.100 --> 00:05:59.460
is it safe for us to be releasing this stuff under this license?

00:05:59.460 --> 00:06:00.960
What's our risk?

00:06:00.960 --> 00:06:02.180
What could go wrong?

00:06:02.180 --> 00:06:05.620
And eventually, the team just pushed hard enough to make it happen.

00:06:05.620 --> 00:06:07.040
And without that,

00:06:07.040 --> 00:06:10.540
there was no open source coming out of Microsoft for the largest part.

00:06:10.540 --> 00:06:11.520
Yeah, that's really cool.

00:06:11.520 --> 00:06:16.040
And back then, that was such a new idea, at least in that space.

00:06:16.040 --> 00:06:18.740
Obviously, open source had been alive and thriving,

00:06:18.740 --> 00:06:22.720
but large corporations doing major open source

00:06:22.720 --> 00:06:24.820
outside of a few places like Red Hat.

00:06:24.820 --> 00:06:25.840
That was pretty rare.

00:06:25.840 --> 00:06:29.500
So it's cool that you kind of got to be part of that seed there.

00:06:29.500 --> 00:06:32.180
And I think in the early days in Microsoft,

00:06:32.180 --> 00:06:35.000
a lot of their attempts to do open source

00:06:35.000 --> 00:06:39.840
came in what I'd consider like source open rather than open source,

00:06:39.840 --> 00:06:41.540
which means you may see the source,

00:06:41.540 --> 00:06:44.660
but there's not the pull requests and take backs.

00:06:44.660 --> 00:06:48.000
And this stuff wasn't really there in the early days for a lot of the projects.

00:06:48.000 --> 00:06:49.740
Like I'm thinking of ASP.NET, for example.

00:06:49.740 --> 00:06:50.640
Yeah, absolutely.

00:06:50.640 --> 00:06:53.160
And some of the licensing that we did,

00:06:53.160 --> 00:06:54.720
again, it's all about managing risk.

00:06:54.720 --> 00:06:57.000
And clearly, at some point,

00:06:57.000 --> 00:06:58.960
there were a couple of lawyers that,

00:06:58.960 --> 00:07:01.120
or the entire legal department,

00:07:01.120 --> 00:07:04.300
decided that the best way to manage that risk

00:07:04.300 --> 00:07:06.940
would be to create licenses that had exactly the clauses

00:07:06.940 --> 00:07:08.600
that we were concerned about.

00:07:08.600 --> 00:07:11.080
And so we had the Microsoft public license,

00:07:11.080 --> 00:07:12.760
Microsoft reciprocal license,

00:07:12.760 --> 00:07:15.560
were invented and used for a while.

00:07:15.560 --> 00:07:18.940
And fundamentally, I don't think there's anything wrong with those licenses,

00:07:18.940 --> 00:07:23.460
apart from the fact that they weren't the ones being used by the community at that point.

00:07:23.460 --> 00:07:26.700
And they never really became common use in the community.

00:07:26.700 --> 00:07:29.020
So people who are used to saying,

00:07:29.020 --> 00:07:31.380
oh, this is Apache, this is MIT, this is BSD,

00:07:31.380 --> 00:07:33.480
I know what these mean, these are familiar,

00:07:33.480 --> 00:07:35.440
suddenly you see an unfamiliar license.

00:07:35.440 --> 00:07:37.040
And without being a lawyer,

00:07:37.040 --> 00:07:39.920
going through and figuring out that it's the same is,

00:07:39.920 --> 00:07:43.960
it's not a difficult task, but it's legal work.

00:07:43.960 --> 00:07:47.260
And so I think people were just seeing those licenses going,

00:07:47.260 --> 00:07:49.880
I don't really trust this,

00:07:49.880 --> 00:07:51.660
I don't know this, I don't understand this.

00:07:51.660 --> 00:07:54.680
Much the same as the people who created those licenses

00:07:54.680 --> 00:07:56.280
were probably looking at the other ones going,

00:07:56.280 --> 00:07:58.900
we don't understand these, we don't trust these.

00:07:58.900 --> 00:08:00.600
What if, what if, what if?

00:08:00.600 --> 00:08:05.340
Yeah, this is so different than my corporate software EULA agreement I normally have,

00:08:05.340 --> 00:08:07.080
this MIT thing, so bizarre.

00:08:07.080 --> 00:08:11.040
Yeah, and there's basically no language shared between the two.

00:08:11.040 --> 00:08:14.020
If you go and actually read some of the corporate EULAs,

00:08:14.020 --> 00:08:17.560
that nobody spends that much time looking over.

00:08:17.560 --> 00:08:19.740
And I'm sure there's some very disappointed lawyers

00:08:19.740 --> 00:08:21.680
who put a lot of effort into writing those,

00:08:21.680 --> 00:08:23.840
that most people don't actually read them.

00:08:23.980 --> 00:08:24.600
Yeah, that's too bad.

00:08:24.600 --> 00:08:26.940
I guess probably in the early days,

00:08:26.940 --> 00:08:28.760
those types of licenses felt just like,

00:08:28.760 --> 00:08:31.860
oh, here's a company trying to do open source,

00:08:31.860 --> 00:08:34.180
but they obviously don't fit in.

00:08:34.180 --> 00:08:35.140
They just look different.

00:08:35.140 --> 00:08:37.740
So they must not really be doing it or something.

00:08:37.740 --> 00:08:40.660
But you guys have adopted the more mainstream stuff these days.

00:08:40.660 --> 00:08:42.320
You've moved a lot of your source code to GitHub.

00:08:43.000 --> 00:08:45.560
You've got more standard licenses, things like that, right?

00:08:45.560 --> 00:08:47.880
Yeah, and at this point, as I said,

00:08:47.880 --> 00:08:51.060
for teams that want to do open source work within Microsoft,

00:08:51.060 --> 00:08:55.400
basically the only choice of license is MIT these days.

00:08:55.400 --> 00:08:57.120
Apache 2 still gets some use,

00:08:57.120 --> 00:08:59.780
and I think there's a slight movement away from that,

00:08:59.780 --> 00:09:02.420
just in terms of what I'm seeing happen at the company.

00:09:02.420 --> 00:09:05.500
It's all about where are people actually doing this?

00:09:05.500 --> 00:09:06.580
How are they actually doing it?

00:09:06.740 --> 00:09:09.740
And we've also had sort of a generation of engineers coming in

00:09:09.740 --> 00:09:11.200
who are familiar with all this.

00:09:11.200 --> 00:09:14.780
So basically everyone working at the company that's under 30

00:09:14.780 --> 00:09:17.060
has used GitHub for their own projects.

00:09:17.060 --> 00:09:19.560
They've been using proper open source.

00:09:19.560 --> 00:09:23.680
They've been releasing their own code under open source for years already.

00:09:23.680 --> 00:09:24.840
And so they come in,

00:09:24.840 --> 00:09:27.320
and suddenly you've got this entire band of junior engineers

00:09:27.320 --> 00:09:29.040
who know how it should be done,

00:09:29.040 --> 00:09:31.580
know how everyone else expects it to be done,

00:09:31.700 --> 00:09:33.540
and is willing to push and make it happen.

00:09:33.540 --> 00:09:36.840
So over time, we have definitely moved to a much better place

00:09:36.840 --> 00:09:38.340
as far as having,

00:09:38.340 --> 00:09:39.140
as far as,

00:09:39.140 --> 00:09:41.240
I don't like saying joining the open source community

00:09:41.240 --> 00:09:43.960
because it sounds like it's really forced,

00:09:43.960 --> 00:09:46.960
but we've definitely got more products

00:09:46.960 --> 00:09:50.600
that are considered genuinely open source projects at this point.

00:09:50.600 --> 00:09:52.980
Yeah, definitely embracing the concept

00:09:52.980 --> 00:09:54.700
and the community of open source more.

00:09:54.700 --> 00:09:55.460
So that's cool.

00:09:55.460 --> 00:09:56.940
So let's talk about Visual Studio

00:09:56.940 --> 00:09:59.920
and specifically the Python support that you guys built.

00:10:00.340 --> 00:10:02.760
Now, I have a pretty wide range of listeners.

00:10:02.760 --> 00:10:05.680
I suspect most of them know what Visual Studio is

00:10:05.680 --> 00:10:06.420
and the history there,

00:10:06.420 --> 00:10:08.720
but could you give us like the 30-second pitch

00:10:08.720 --> 00:10:09.860
on what is Visual Studio,

00:10:09.860 --> 00:10:11.760
where did it come from,

00:10:11.760 --> 00:10:14.360
and why is it special that it has Python support now?

00:10:14.360 --> 00:10:18.280
I suspect Visual Studio is probably older than me in a lot of ways.

00:10:18.280 --> 00:10:22.180
It's a very old project that's basically

00:10:22.180 --> 00:10:24.180
Microsoft's development platform.

00:10:24.180 --> 00:10:27.500
So developers who need access to editors, tools,

00:10:28.160 --> 00:10:32.420
debuggers, and all of the things that come with building

00:10:32.420 --> 00:10:34.320
and managing and releasing software

00:10:34.320 --> 00:10:36.500
typically find themselves inside Visual Studio.

00:10:36.500 --> 00:10:39.940
I first started using it as Visual Basic 4,

00:10:39.940 --> 00:10:41.860
which was a long, long time ago,

00:10:41.860 --> 00:10:44.260
and it's grown out of that.

00:10:44.260 --> 00:10:47.460
I don't have the full history hand here in my mind.

00:10:47.460 --> 00:10:48.400
I mean, at that point,

00:10:48.400 --> 00:10:50.800
I was a hobbyist and not an employee.

00:10:51.440 --> 00:10:55.440
But these days, Visual Studio is very much the development platform.

00:10:55.440 --> 00:10:59.260
It's the integrated environment that has all of the editors,

00:10:59.260 --> 00:11:00.140
all of the tools,

00:11:00.140 --> 00:11:03.200
all the languages that Microsoft supports development in

00:11:03.200 --> 00:11:04.500
go through Visual Studio,

00:11:04.500 --> 00:11:08.160
all of our platforms that you may want to build things for

00:11:08.160 --> 00:11:09.320
or deploy things to.

00:11:09.320 --> 00:11:12.600
So everything from Xbox through to phones,

00:11:12.600 --> 00:11:15.380
which includes all phone OSs at this point.

00:11:15.880 --> 00:11:19.760
You'll go through Visual Studio for building, debugging, deploying, testing.

00:11:19.760 --> 00:11:23.980
It really is the home for Microsoft developers.

00:11:23.980 --> 00:11:26.100
Yeah, so bringing Python support to that

00:11:26.100 --> 00:11:30.220
is something that our team has been really keen to do for a long time

00:11:30.220 --> 00:11:34.240
just because it's already the home for so many developers.

00:11:34.740 --> 00:11:37.000
And so people who are using C++

00:11:37.000 --> 00:11:39.120
or people who are using JavaScript

00:11:39.120 --> 00:11:41.260
and may want an alternative for another language

00:11:41.260 --> 00:11:44.400
have historically been switching out to other editors.

00:11:44.400 --> 00:11:46.960
And there's no need for that.

00:11:46.960 --> 00:11:49.640
I mean, Visual Studio has great support for so many languages

00:11:49.640 --> 00:11:51.220
that having Python in there as well

00:11:51.220 --> 00:11:54.280
is something that we've always been really keen to have.

00:11:54.280 --> 00:11:55.840
So we've been working on that for years.

00:11:55.840 --> 00:11:56.940
And at this point,

00:11:56.940 --> 00:11:58.980
it's right up there with the other languages,

00:11:58.980 --> 00:12:00.260
which is great to see.

00:12:00.260 --> 00:12:01.540
Yeah, that's really great to see.

00:12:01.620 --> 00:12:05.560
And we don't often just work in one language anymore, right?

00:12:05.560 --> 00:12:07.460
Like, if you're going to build a web app,

00:12:07.460 --> 00:12:09.360
you're probably doing some T-SQL.

00:12:09.360 --> 00:12:11.600
You're doing Python.

00:12:11.600 --> 00:12:13.400
Obviously, if you're doing it in Python,

00:12:13.400 --> 00:12:16.800
you'll be doing some CSS, some HTML, some JavaScript.

00:12:16.800 --> 00:12:20.440
And the fact that Visual Studio is really good at all of those things

00:12:20.440 --> 00:12:22.520
and now Python as well,

00:12:22.520 --> 00:12:24.640
that's really cool because it brings them all together

00:12:24.640 --> 00:12:26.060
really in one place.

00:12:26.060 --> 00:12:27.320
You don't have to jump around, like you said.

00:12:27.320 --> 00:12:30.960
So can you maybe contrast, like,

00:12:30.960 --> 00:12:34.840
the development experience with, say, like Sublime or Emacs?

00:12:34.840 --> 00:12:36.160
Like, why would somebody who's like,

00:12:36.160 --> 00:12:39.640
I love Sublime, start super fast, it's lightweight, it's free,

00:12:39.640 --> 00:12:41.160
unless you pay for it.

00:12:41.160 --> 00:12:42.900
But it'll let you use it for free, basically.

00:12:42.900 --> 00:12:45.800
I think it's $59 officially.

00:12:45.800 --> 00:12:48.560
And contrast that with, like, Visual Studio.

00:12:48.560 --> 00:12:51.240
Like, how much does Visual Studio cost to get going with?

00:12:51.540 --> 00:12:53.620
Depending on what you're planning on doing with it,

00:12:53.620 --> 00:12:55.140
Visual Studio is probably free.

00:12:55.140 --> 00:12:58.020
Visual Studio Community Edition was released,

00:12:58.020 --> 00:13:00.240
what was that, a year, two years ago?

00:13:00.240 --> 00:13:03.240
And that's still part of the current release,

00:13:03.240 --> 00:13:04.440
is the free version.

00:13:04.440 --> 00:13:08.420
And that's available if you're basically not a huge company

00:13:08.420 --> 00:13:10.360
or you're working on open source software.

00:13:10.360 --> 00:13:13.020
You can freely use Community Edition,

00:13:13.020 --> 00:13:16.180
which has all of the features of the Professional Edition.

00:13:16.740 --> 00:13:18.860
It doesn't have the enterprise-level features,

00:13:18.860 --> 00:13:22.080
but that's mostly, I believe,

00:13:22.080 --> 00:13:24.260
application lifecycle management stuff that,

00:13:24.260 --> 00:13:27.320
well, some people absolutely love it, require it,

00:13:27.320 --> 00:13:29.200
and we use it a lot internally at Microsoft.

00:13:29.200 --> 00:13:31.660
It's not critical for small projects.

00:13:31.660 --> 00:13:33.460
And certainly, if you're using GitHub

00:13:33.460 --> 00:13:35.400
or some form of public issue tracker,

00:13:35.400 --> 00:13:37.000
it's not actually that valuable for you,

00:13:37.000 --> 00:13:38.260
given my understanding.

00:13:38.260 --> 00:13:41.260
But the free version is widely available,

00:13:41.260 --> 00:13:43.560
and that includes all functionality.

00:13:44.380 --> 00:13:47.080
And everything from Python support,

00:13:47.080 --> 00:13:48.820
Node.js support,

00:13:48.820 --> 00:13:51.580
and even as we just announced the other week,

00:13:51.580 --> 00:13:52.800
that's going to include Xamarin

00:13:52.800 --> 00:13:55.360
for all the cross-platform work

00:13:55.360 --> 00:13:56.600
that people want to do these days.

00:13:56.600 --> 00:13:58.940
Yeah, Xamarin's an interesting story.

00:13:58.940 --> 00:14:00.620
I don't want to go down that rabbit hole,

00:14:00.620 --> 00:14:03.400
but just so people maybe don't know,

00:14:03.400 --> 00:14:06.360
Microsoft purchased Xamarin about a month ago.

00:14:06.360 --> 00:14:08.960
And Xamarin is basically

00:14:08.960 --> 00:14:12.380
a development environment for taking code,

00:14:12.380 --> 00:14:13.420
C-sharp code,

00:14:13.420 --> 00:14:16.000
and building cross-platform apps

00:14:16.000 --> 00:14:17.520
that feel native, right?

00:14:17.520 --> 00:14:20.160
Like, for example, I learned at Build,

00:14:20.160 --> 00:14:21.680
watching some of the Build videos,

00:14:21.680 --> 00:14:23.280
doing some research on this stuff,

00:14:23.280 --> 00:14:26.380
that Slack builds their mobile apps

00:14:26.380 --> 00:14:27.060
with Xamarin.

00:14:27.060 --> 00:14:27.620
That's pretty cool.

00:14:27.620 --> 00:14:45.360
This episode is brought to you by SnapCI,

00:14:45.360 --> 00:14:48.600
the only hosted cloud-based continuous integration

00:14:48.600 --> 00:14:49.700
and delivery solution

00:14:49.700 --> 00:14:51.600
that offers multi-stage pipelines

00:14:51.600 --> 00:14:53.060
as a built-in feature.

00:14:53.760 --> 00:14:55.920
SnapCI is built to follow best practices

00:14:55.920 --> 00:14:57.120
like automated builds,

00:14:57.120 --> 00:14:58.500
testing before integration,

00:14:58.500 --> 00:15:00.400
and provides high visibility

00:15:00.400 --> 00:15:01.600
into who's doing what.

00:15:01.600 --> 00:15:04.040
Just connect Snap to your GitHub repo

00:15:04.040 --> 00:15:05.600
and it automatically builds

00:15:05.600 --> 00:15:06.840
the first pipeline for you.

00:15:06.840 --> 00:15:08.500
It's simple enough for those

00:15:08.500 --> 00:15:09.980
who are new to continuous integration,

00:15:09.980 --> 00:15:11.660
yet powerful enough to run

00:15:11.660 --> 00:15:13.120
dozens of parallel pipelines.

00:15:13.120 --> 00:15:15.440
More reliable and frequent releases.

00:15:15.440 --> 00:15:16.340
That's Snap.

00:15:16.340 --> 00:15:18.220
For a free, no-obligation,

00:15:18.220 --> 00:15:19.280
30-day trial,

00:15:19.480 --> 00:15:22.360
just go to snap.ci slash talkpython.

00:15:22.360 --> 00:15:33.760
Yeah, no, it's really nice to have,

00:15:33.760 --> 00:15:36.260
like, getting back to the right ones run anywhere,

00:15:36.260 --> 00:15:38.180
but it's a genuine run

00:15:38.180 --> 00:15:39.780
in the place where you are

00:15:39.780 --> 00:15:41.040
and not sort of the old

00:15:41.040 --> 00:15:43.880
completely locked-down virtual machine run anywhere

00:15:43.880 --> 00:15:46.040
that we had in the early days of Java.

00:15:46.400 --> 00:15:48.560
Yeah, where you'd open an about box

00:15:48.560 --> 00:15:50.100
and it looked clearly foreign.

00:15:50.100 --> 00:15:51.040
Yeah, exactly.

00:15:51.040 --> 00:15:53.140
You'd open it like a file browser

00:15:53.140 --> 00:15:55.120
and it was obviously not part of the OS

00:15:55.120 --> 00:15:56.020
or something like that, right?

00:15:56.020 --> 00:15:56.580
Yep.

00:15:56.580 --> 00:15:58.560
Compared to something like Sublime

00:15:58.560 --> 00:16:00.200
that's sort of really lightweight,

00:16:00.200 --> 00:16:01.100
Visual Studio,

00:16:01.100 --> 00:16:02.220
you're going to find

00:16:02.220 --> 00:16:03.940
a more featureful experience.

00:16:03.940 --> 00:16:06.340
So, I know a lot of people love Sublime

00:16:06.340 --> 00:16:07.280
because it opens quickly.

00:16:07.280 --> 00:16:09.160
Visual Studio can open quickly,

00:16:09.160 --> 00:16:09.880
quite often,

00:16:09.880 --> 00:16:12.340
and they're certainly always working on improving that.

00:16:12.660 --> 00:16:14.080
But the big difference is once you're in,

00:16:14.080 --> 00:16:15.520
Visual Studio has

00:16:15.520 --> 00:16:17.520
much, much better IntelliSense

00:16:17.520 --> 00:16:19.220
for every language that it supports

00:16:19.220 --> 00:16:21.760
than you'll find in a lightweight text editor.

00:16:21.760 --> 00:16:24.360
And even a lot of the plugins for Emacs and VI

00:16:24.360 --> 00:16:28.480
don't actually reach the same level of intelligence

00:16:28.480 --> 00:16:31.100
about your code that we have in Visual Studio.

00:16:31.100 --> 00:16:34.360
So, things like understanding decorators,

00:16:34.360 --> 00:16:37.420
recognizing what types have gone into a tuple,

00:16:37.620 --> 00:16:39.840
and then when you expand that out later,

00:16:39.840 --> 00:16:41.100
we still know those types.

00:16:41.100 --> 00:16:43.960
Things like what items have been added to a list.

00:16:43.960 --> 00:16:45.620
So, when you iterate over that list later,

00:16:45.620 --> 00:16:46.680
we can say, yeah,

00:16:46.680 --> 00:16:47.960
we know it's one of these types

00:16:47.960 --> 00:16:48.980
because these are all the things

00:16:48.980 --> 00:16:50.020
that you've put into the list

00:16:50.020 --> 00:16:51.600
everywhere else in your code

00:16:51.600 --> 00:16:53.280
for this particular list.

00:16:53.280 --> 00:16:53.640
Right.

00:16:53.640 --> 00:16:54.800
So, you get like IntelliSense

00:16:54.800 --> 00:16:55.940
on the item to the list

00:16:55.940 --> 00:16:56.760
in your foreign loops,

00:16:56.760 --> 00:16:57.620
for example, right?

00:16:57.620 --> 00:16:58.000
Yeah.

00:16:58.000 --> 00:17:00.400
Which demos really nicely most of the time.

00:17:00.400 --> 00:17:02.500
But it is certainly a feature

00:17:02.500 --> 00:17:03.520
that's very unique

00:17:03.520 --> 00:17:05.640
to the integrated development environments,

00:17:05.820 --> 00:17:08.040
the bigger, heavier weight tools

00:17:08.040 --> 00:17:10.780
that I guess the current generation

00:17:10.780 --> 00:17:12.040
of advanced text editors

00:17:12.040 --> 00:17:13.280
we're seeing like Sublime,

00:17:13.280 --> 00:17:14.040
like Atom,

00:17:14.040 --> 00:17:15.380
like Notepad++,

00:17:15.380 --> 00:17:17.440
just don't have that same level

00:17:17.440 --> 00:17:19.500
of intelligence about the code.

00:17:19.500 --> 00:17:20.980
I think that sums it up pretty well.

00:17:20.980 --> 00:17:22.560
And people who listen to the show a lot

00:17:22.560 --> 00:17:23.700
know that I kind of come down

00:17:23.700 --> 00:17:26.200
on preferring the heavyweight IDE stuff

00:17:26.200 --> 00:17:28.240
that really helps once you get it started

00:17:28.240 --> 00:17:29.620
with large projects

00:17:29.620 --> 00:17:30.640
and understanding your code.

00:17:30.640 --> 00:17:32.540
But I know that not everyone is that way.

00:17:32.540 --> 00:17:35.460
So, it's interesting to look at the both sides.

00:17:35.560 --> 00:17:35.920
Yeah.

00:17:35.920 --> 00:17:35.960
Yeah.

00:17:35.960 --> 00:17:37.500
And it's definitely interesting

00:17:37.500 --> 00:17:38.980
to see the difference

00:17:38.980 --> 00:17:41.840
between different communities of people

00:17:41.840 --> 00:17:43.040
when it comes to this.

00:17:43.040 --> 00:17:43.920
Because I find so,

00:17:43.920 --> 00:17:45.040
at Build last week,

00:17:45.040 --> 00:17:46.740
talking to a largely Microsoft audience,

00:17:46.740 --> 00:17:48.420
everybody knows Visual Studio,

00:17:48.420 --> 00:17:49.480
everyone loves it,

00:17:49.480 --> 00:17:51.560
and they don't really know Python that well.

00:17:51.560 --> 00:17:53.660
But that means that when you get up

00:17:53.660 --> 00:17:55.840
and show IntelliSense demos,

00:17:55.840 --> 00:17:56.840
they're just not impressed

00:17:56.840 --> 00:17:58.360
because they're used to Visual Studio.

00:17:58.360 --> 00:17:58.780
And they're like,

00:17:58.780 --> 00:17:59.940
well, you're in Visual Studio.

00:17:59.940 --> 00:18:01.140
Of course you get IntelliSense.

00:18:01.140 --> 00:18:02.520
Why are you showing me this?

00:18:03.080 --> 00:18:04.720
Whereas when you go to the Python audience,

00:18:04.720 --> 00:18:06.820
and even people who will flat out say,

00:18:06.820 --> 00:18:08.820
I don't want to use an integrated environment,

00:18:08.820 --> 00:18:09.860
it's too heavyweight,

00:18:09.860 --> 00:18:11.120
it doesn't add any features,

00:18:11.120 --> 00:18:12.360
and then you show them

00:18:12.360 --> 00:18:14.400
that you can go to any variable

00:18:14.400 --> 00:18:15.660
and hit F12

00:18:15.660 --> 00:18:17.460
and see everywhere that it's been assigned,

00:18:17.460 --> 00:18:19.820
or go to the very first place it was defined.

00:18:19.820 --> 00:18:22.900
You can override and monkey patch functions

00:18:22.900 --> 00:18:24.280
and see all the places

00:18:24.280 --> 00:18:25.220
where those were changed

00:18:25.220 --> 00:18:26.280
and where they all came from.

00:18:26.540 --> 00:18:27.360
And suddenly they go,

00:18:27.360 --> 00:18:28.680
oh, wow, this is amazing.

00:18:28.680 --> 00:18:31.360
Maybe I do want the heavyweight environment

00:18:31.360 --> 00:18:34.440
if it has this kind of magic functionality in it.

00:18:34.440 --> 00:18:34.840
That's right.

00:18:34.840 --> 00:18:36.420
Maybe it's worth waiting that three seconds

00:18:36.420 --> 00:18:37.440
for it to start or whatever,

00:18:37.440 --> 00:18:39.040
because you're going to be in it for the whole day.

00:18:39.040 --> 00:18:41.700
So let's talk about some of the features.

00:18:41.700 --> 00:18:42.540
Before we do,

00:18:42.540 --> 00:18:44.000
one thing that you mentioned

00:18:44.000 --> 00:18:46.120
in some of your conversations

00:18:46.120 --> 00:18:46.880
in Build Conference

00:18:46.880 --> 00:18:49.380
was sort of about Iron Python

00:18:49.380 --> 00:18:51.260
and Python 2 and Python 3 support,

00:18:51.260 --> 00:18:52.480
specifically CPython.

00:18:52.480 --> 00:18:54.160
Some people listening might be thinking,

00:18:54.160 --> 00:18:55.060
well, this is Microsoft,

00:18:55.280 --> 00:18:56.340
it's Windows, it's Iron Python,

00:18:56.340 --> 00:18:58.340
which is the Python

00:18:58.340 --> 00:19:00.400
that runs on top of the .NET CLR.

00:19:00.400 --> 00:19:03.520
Yeah, so Iron Python was a project

00:19:03.520 --> 00:19:04.440
started at Microsoft.

00:19:04.440 --> 00:19:06.360
I don't remember exactly when,

00:19:06.360 --> 00:19:08.660
possibly as long as 10 years ago at this point.

00:19:08.660 --> 00:19:10.080
When they were building

00:19:10.080 --> 00:19:11.060
the common language runtime,

00:19:11.060 --> 00:19:13.720
there was a small team that decided

00:19:13.720 --> 00:19:15.520
we should build a dynamic language runtime

00:19:15.520 --> 00:19:17.020
on top of this as well.

00:19:17.020 --> 00:19:19.440
So effectively using the .NET platform

00:19:19.440 --> 00:19:21.260
to do dynamic languages.

00:19:21.260 --> 00:19:22.460
And as part of that,

00:19:22.460 --> 00:19:24.180
they built Iron Python and Iron Ruby

00:19:24.180 --> 00:19:25.600
to use that runtime

00:19:25.600 --> 00:19:26.960
as, you know,

00:19:26.960 --> 00:19:27.720
you need to make sure

00:19:27.720 --> 00:19:28.840
that it's actually valid

00:19:28.840 --> 00:19:30.620
by doing something useful with it.

00:19:30.620 --> 00:19:32.320
And then when that project

00:19:32.320 --> 00:19:35.320
eventually was not advancing

00:19:35.320 --> 00:19:36.460
any further in that form

00:19:36.460 --> 00:19:38.080
and some pieces were taken

00:19:38.080 --> 00:19:39.360
and used for other things,

00:19:39.360 --> 00:19:40.540
so people familiar

00:19:40.540 --> 00:19:42.560
with the dynamic keyword in C#

00:19:42.560 --> 00:19:44.340
will probably recognize

00:19:44.340 --> 00:19:45.940
that that came out of that work.

00:19:45.940 --> 00:19:47.440
But Iron Python and Iron Ruby

00:19:47.440 --> 00:19:48.620
were effectively pushed out

00:19:48.620 --> 00:19:49.180
to the community

00:19:49.180 --> 00:19:51.060
around about 2009, 2010.

00:19:51.700 --> 00:19:52.800
And since then,

00:19:52.800 --> 00:19:55.500
Iron Python's been maintained externally.

00:19:55.500 --> 00:19:57.320
Microsoft has nothing official

00:19:57.320 --> 00:19:58.200
to do with it anymore,

00:19:58.200 --> 00:19:59.020
though we do occasionally

00:19:59.020 --> 00:20:00.240
contribute to it.

00:20:00.240 --> 00:20:01.120
But it is,

00:20:01.120 --> 00:20:03.220
it's Python on top of .NET.

00:20:03.220 --> 00:20:04.980
And a lot of people still use it.

00:20:04.980 --> 00:20:06.340
It gets a lot of love,

00:20:06.340 --> 00:20:07.500
especially from people

00:20:07.500 --> 00:20:09.300
who have sort of C#

00:20:09.300 --> 00:20:11.080
or F Sharp assemblies

00:20:11.080 --> 00:20:12.380
that they want to use from Python

00:20:12.380 --> 00:20:13.620
or they want to test from Python

00:20:13.620 --> 00:20:14.900
because it's so natural

00:20:14.900 --> 00:20:16.440
to just load those up

00:20:16.440 --> 00:20:17.620
with an import statement

00:20:17.620 --> 00:20:18.420
and call into it.

00:20:18.520 --> 00:20:19.980
But there is a big assumption

00:20:19.980 --> 00:20:21.600
that being Microsoft,

00:20:21.600 --> 00:20:23.220
that's all we care about.

00:20:23.220 --> 00:20:24.140
And that's absolutely

00:20:24.140 --> 00:20:25.340
not the case at this stage

00:20:25.340 --> 00:20:27.040
and hasn't been for six years.

00:20:27.040 --> 00:20:29.260
When that project was released

00:20:29.260 --> 00:20:30.320
and we started

00:20:30.320 --> 00:20:31.560
on the Visual Studio support,

00:20:31.560 --> 00:20:33.700
it was really, really clear

00:20:33.700 --> 00:20:36.100
that 99 plus percent

00:20:36.100 --> 00:20:37.520
of Python developers

00:20:37.520 --> 00:20:38.480
were using CPython

00:20:38.480 --> 00:20:40.160
and there was just no way

00:20:40.160 --> 00:20:42.080
that we could cut those people out

00:20:42.080 --> 00:20:42.520
and say,

00:20:42.520 --> 00:20:44.040
well, you've all got to switch

00:20:44.040 --> 00:20:45.100
to .NET to use this.

00:20:45.100 --> 00:20:47.060
That would have been just ridiculous.

00:20:47.060 --> 00:20:47.920
So we didn't do it.

00:20:47.920 --> 00:20:48.720
Yeah, and the guys

00:20:48.720 --> 00:20:50.580
with things like NumPy,

00:20:50.580 --> 00:20:50.960
they're like,

00:20:50.960 --> 00:20:52.440
you know, I kind of like this library.

00:20:52.440 --> 00:20:54.500
I'd like to see integration

00:20:54.500 --> 00:20:55.840
with this package

00:20:55.840 --> 00:20:57.020
and I don't want to just

00:20:57.020 --> 00:20:58.100
do some .NET thing.

00:20:58.100 --> 00:20:59.220
So obviously, right?

00:20:59.220 --> 00:21:02.500
Yeah, and NumPy is hard enough

00:21:02.500 --> 00:21:04.240
to build on Windows already

00:21:04.240 --> 00:21:05.200
that we wouldn't want

00:21:05.200 --> 00:21:06.220
to be forcing people

00:21:06.220 --> 00:21:06.820
to have to build it

00:21:06.820 --> 00:21:07.780
as part of IronPython.

00:21:07.780 --> 00:21:09.220
Though we did try that for a while.

00:21:09.220 --> 00:21:10.220
There was a project

00:21:10.220 --> 00:21:11.000
to get that working

00:21:11.000 --> 00:21:11.840
that eventually

00:21:11.840 --> 00:21:13.740
just ran into too many issues.

00:21:13.740 --> 00:21:15.720
But yeah, CPython is

00:21:15.720 --> 00:21:17.600
sort of the main star of the show.

00:21:17.800 --> 00:21:18.320
for us.

00:21:18.320 --> 00:21:20.320
So the Visual Studio support

00:21:20.320 --> 00:21:22.360
extends from CPython 2.5

00:21:22.360 --> 00:21:23.380
through to 3.5

00:21:23.380 --> 00:21:25.400
with every version in between

00:21:25.400 --> 00:21:28.160
and 32-bit, 64-bit

00:21:28.160 --> 00:21:30.620
and everything from

00:21:30.620 --> 00:21:31.860
debugging, profiling,

00:21:31.860 --> 00:21:32.940
IntelliSense.

00:21:32.940 --> 00:21:33.660
We have all the

00:21:33.660 --> 00:21:34.880
context-sensitive keywords

00:21:34.880 --> 00:21:35.980
like async and await.

00:21:36.440 --> 00:21:38.140
We handle all the future imports

00:21:38.140 --> 00:21:39.460
for CPython properly

00:21:39.460 --> 00:21:41.960
and all the other interpreters

00:21:41.960 --> 00:21:43.020
are supported as well.

00:21:43.020 --> 00:21:43.900
And frankly,

00:21:43.900 --> 00:21:45.640
they tend to come off

00:21:45.640 --> 00:21:48.840
a bit like a second thought

00:21:48.840 --> 00:21:50.240
compared to CPython.

00:21:50.240 --> 00:21:51.680
We're very much focused on

00:21:51.680 --> 00:21:53.300
the same area that the entire

00:21:53.300 --> 00:21:53.920
Python community

00:21:53.920 --> 00:21:54.720
is focused on.

00:21:54.720 --> 00:21:56.620
So PyPy, Jython,

00:21:56.620 --> 00:21:57.640
IronPython,

00:21:57.880 --> 00:21:58.720
we test,

00:21:58.720 --> 00:22:00.320
we use a bit,

00:22:00.320 --> 00:22:01.540
but CPython gets the bulk

00:22:01.540 --> 00:22:01.980
of the work.

00:22:02.440 --> 00:22:03.400
I kind of feel like

00:22:03.400 --> 00:22:04.280
the entire community

00:22:04.280 --> 00:22:05.480
is just going to use CPython

00:22:05.480 --> 00:22:06.700
unless there's some

00:22:06.700 --> 00:22:08.220
huge pressure

00:22:08.220 --> 00:22:09.720
from a performance problem

00:22:09.720 --> 00:22:11.640
or some other type of thing

00:22:11.640 --> 00:22:12.620
that forces them to

00:22:12.620 --> 00:22:13.880
go and find some other

00:22:13.880 --> 00:22:15.280
interpreter or runtime

00:22:15.280 --> 00:22:16.240
like PyPy,

00:22:16.240 --> 00:22:17.120
which is really cool,

00:22:17.120 --> 00:22:18.860
but it's just not the standard.

00:22:18.860 --> 00:22:19.860
So you've got to have

00:22:19.860 --> 00:22:20.460
a really good reason

00:22:20.460 --> 00:22:21.080
to do that, right?

00:22:21.280 --> 00:22:22.220
Yeah, and frankly,

00:22:22.220 --> 00:22:23.140
I'm a little disappointed

00:22:23.140 --> 00:22:24.500
that Jython didn't get

00:22:24.500 --> 00:22:25.580
a nice big boost

00:22:25.580 --> 00:22:26.900
from Minecraft integration.

00:22:26.900 --> 00:22:30.000
I was really hoping

00:22:30.000 --> 00:22:30.880
that was going to

00:22:30.880 --> 00:22:32.000
push it a long way along,

00:22:32.000 --> 00:22:33.080
but that doesn't seem

00:22:33.080 --> 00:22:33.600
to have happened.

00:22:33.600 --> 00:22:34.280
I know a few people

00:22:34.280 --> 00:22:34.740
have done it,

00:22:34.740 --> 00:22:36.400
but that could have been

00:22:36.400 --> 00:22:36.880
a lot of fun.

00:22:36.880 --> 00:22:38.260
Yeah, yeah, too bad.

00:22:38.260 --> 00:22:39.380
Let's talk about

00:22:39.380 --> 00:22:40.920
some of the project types

00:22:40.920 --> 00:22:42.260
and types of apps

00:22:42.260 --> 00:22:43.000
that you can build

00:22:43.000 --> 00:22:44.620
with Visual Studio

00:22:44.620 --> 00:22:45.520
Python support.

00:22:45.520 --> 00:22:46.720
So you guys have

00:22:46.720 --> 00:22:47.600
web apps, right?

00:22:47.600 --> 00:22:48.940
Yeah, so a project

00:22:48.940 --> 00:22:49.600
in Visual Studio,

00:22:49.600 --> 00:22:51.060
for those who don't use it,

00:22:51.140 --> 00:22:51.880
is essentially

00:22:51.880 --> 00:22:53.160
just a collection of files.

00:22:53.160 --> 00:22:54.860
You can think of it

00:22:54.860 --> 00:22:56.640
as these are the files

00:22:56.640 --> 00:22:57.520
that all relate

00:22:57.520 --> 00:22:58.580
to this one project.

00:22:58.580 --> 00:22:59.760
It's roughly equivalent

00:22:59.760 --> 00:23:00.420
to these are the ones

00:23:00.420 --> 00:23:00.980
that I check into

00:23:00.980 --> 00:23:01.600
source control

00:23:01.600 --> 00:23:02.680
or the things that I may

00:23:02.680 --> 00:23:03.240
want to edit

00:23:03.240 --> 00:23:04.580
within Visual Studio,

00:23:04.580 --> 00:23:06.140
but a project also includes

00:23:06.140 --> 00:23:07.740
things like launch options,

00:23:07.740 --> 00:23:08.780
debugging options,

00:23:08.780 --> 00:23:10.560
and so there's a few

00:23:10.560 --> 00:23:11.260
sort of categories

00:23:11.260 --> 00:23:12.040
of those that we like

00:23:12.040 --> 00:23:12.680
to start with.

00:23:12.680 --> 00:23:13.840
So web projects

00:23:13.840 --> 00:23:15.860
quite often have

00:23:15.860 --> 00:23:16.900
different launch options.

00:23:16.900 --> 00:23:18.200
So rather than just

00:23:18.200 --> 00:23:19.200
typing Python name

00:23:19.200 --> 00:23:19.680
of the script,

00:23:19.680 --> 00:23:20.100
you'll do

00:23:20.100 --> 00:23:21.360
python-m bottle

00:23:21.360 --> 00:23:22.220
name of the script,

00:23:22.220 --> 00:23:24.160
or python manage.py run

00:23:24.160 --> 00:23:25.780
server to get it going.

00:23:25.780 --> 00:23:26.340
So they have

00:23:26.340 --> 00:23:27.480
different launch options.

00:23:27.480 --> 00:23:28.640
So we provide

00:23:28.640 --> 00:23:29.260
some projects

00:23:29.260 --> 00:23:30.560
that pre-configure

00:23:30.560 --> 00:23:31.300
those effectively

00:23:31.300 --> 00:23:32.480
so that when you go

00:23:32.480 --> 00:23:33.140
and hit F5

00:23:33.140 --> 00:23:33.680
to start running,

00:23:33.680 --> 00:23:34.540
it's already set up

00:23:34.540 --> 00:23:35.680
for running

00:23:35.680 --> 00:23:36.660
that web project.

00:23:37.160 --> 00:23:38.560
but the project itself

00:23:38.560 --> 00:23:39.780
is not actually

00:23:39.780 --> 00:23:40.520
that constraining

00:23:40.520 --> 00:23:42.300
and it's quite easy

00:23:42.300 --> 00:23:43.440
to configure

00:23:43.440 --> 00:23:44.480
a regular project

00:23:44.480 --> 00:23:46.340
to be a Python project

00:23:46.340 --> 00:23:46.980
and we've actually

00:23:46.980 --> 00:23:48.100
got some future work

00:23:48.100 --> 00:23:48.400
coming,

00:23:48.400 --> 00:23:49.440
which I think we'll

00:23:49.440 --> 00:23:50.240
talk about future work

00:23:50.240 --> 00:23:50.620
in a bit,

00:23:50.620 --> 00:23:51.480
that we'll just get rid

00:23:51.480 --> 00:23:52.380
of projects completely.

00:23:52.380 --> 00:23:53.940
Oh, how interesting.

00:23:53.940 --> 00:23:54.420
Okay.

00:23:54.420 --> 00:23:55.240
Well, that sounds

00:23:55.240 --> 00:23:55.700
really cool.

00:23:55.700 --> 00:23:57.060
So if I have

00:23:57.060 --> 00:23:58.440
like a Flask app

00:23:58.440 --> 00:24:00.120
and it's got

00:24:00.120 --> 00:24:00.860
all of its templates,

00:24:00.860 --> 00:24:01.760
does it understand,

00:24:01.760 --> 00:24:02.540
does Visual Studio

00:24:02.540 --> 00:24:03.980
understand like

00:24:03.980 --> 00:24:04.840
the Jinja 2

00:24:04.840 --> 00:24:06.440
or Chameleon templates?

00:24:06.440 --> 00:24:07.600
So we don't have

00:24:07.600 --> 00:24:08.480
Jinja 2 yet.

00:24:08.480 --> 00:24:09.500
A while back,

00:24:09.500 --> 00:24:10.240
we invested in

00:24:10.240 --> 00:24:11.040
Django templates

00:24:11.040 --> 00:24:12.480
and have that there.

00:24:12.480 --> 00:24:14.480
So if you're using

00:24:14.480 --> 00:24:15.240
Django and using

00:24:15.240 --> 00:24:16.380
the Django template syntax,

00:24:16.380 --> 00:24:17.620
now this is before

00:24:17.620 --> 00:24:18.040
they offered

00:24:18.040 --> 00:24:18.940
Jinja 2 as an option,

00:24:18.940 --> 00:24:20.420
then you'll get

00:24:20.420 --> 00:24:21.000
IntelliSense

00:24:21.000 --> 00:24:22.520
within the template file,

00:24:22.520 --> 00:24:23.440
you'll be able to debug,

00:24:23.440 --> 00:24:24.500
you can set a breakpoint

00:24:24.500 --> 00:24:25.140
in the template

00:24:25.140 --> 00:24:26.520
and it'll stop

00:24:26.520 --> 00:24:27.020
and you can step

00:24:27.020 --> 00:24:27.820
through your template

00:24:27.820 --> 00:24:29.120
as it's being generated

00:24:29.120 --> 00:24:30.520
on your local machine.

00:24:30.520 --> 00:24:31.440
Yeah, the debugging

00:24:31.440 --> 00:24:32.200
of the templates,

00:24:32.200 --> 00:24:33.100
that's pretty awesome

00:24:33.100 --> 00:24:33.660
because sometimes

00:24:33.660 --> 00:24:34.900
when template binding

00:24:34.900 --> 00:24:35.800
goes wrong,

00:24:35.800 --> 00:24:36.120
you're just like,

00:24:36.120 --> 00:24:37.420
why is this not working?

00:24:37.420 --> 00:24:38.540
It's really hard to understand

00:24:38.540 --> 00:24:40.220
like when it's handed off

00:24:40.220 --> 00:24:41.340
to the template engine,

00:24:41.340 --> 00:24:42.720
like what's going on anymore?

00:24:42.720 --> 00:24:43.740
So that's pretty cool.

00:24:43.740 --> 00:24:44.600
Yeah, and definitely

00:24:44.600 --> 00:24:45.420
when things go wrong,

00:24:45.420 --> 00:24:46.380
you don't always get

00:24:46.380 --> 00:24:47.760
the nicest stack trace

00:24:47.760 --> 00:24:48.400
out of it.

00:24:48.400 --> 00:24:49.840
So being able to stop

00:24:49.840 --> 00:24:51.000
execution just before

00:24:51.000 --> 00:24:52.340
something gets rendered

00:24:52.340 --> 00:24:53.380
incorrectly and inspect

00:24:53.380 --> 00:24:54.340
and see what's going on

00:24:54.340 --> 00:24:55.680
is really helpful.

00:24:55.680 --> 00:24:56.540
Yeah, a lot of times

00:24:56.540 --> 00:24:57.240
it's kind of like

00:24:57.240 --> 00:24:58.540
there was something wrong

00:24:58.540 --> 00:24:59.180
with your template.

00:24:59.180 --> 00:24:59.700
Yeah.

00:24:59.700 --> 00:25:00.840
Or your data

00:25:00.840 --> 00:25:01.580
going to the template.

00:25:01.580 --> 00:25:02.500
Sorry, because it's just

00:25:02.500 --> 00:25:03.040
the call stack

00:25:03.040 --> 00:25:04.140
of like the template parsing.

00:25:04.140 --> 00:25:05.780
So that doesn't help.

00:25:05.780 --> 00:25:06.320
Yeah.

00:25:06.320 --> 00:25:07.240
Sort of generic

00:25:07.240 --> 00:25:08.120
Jinja 2 support

00:25:08.120 --> 00:25:09.720
is on our wish list

00:25:09.720 --> 00:25:10.720
of things we'd love to do.

00:25:10.720 --> 00:25:13.100
We briefly investigated

00:25:13.100 --> 00:25:14.420
updating the stuff

00:25:14.420 --> 00:25:15.140
we have for Django

00:25:15.140 --> 00:25:16.100
to support Jinja

00:25:16.100 --> 00:25:18.900
and it's not quite feasible yet.

00:25:18.900 --> 00:25:19.440
Django,

00:25:19.440 --> 00:25:21.320
original style Django templates

00:25:21.320 --> 00:25:22.680
were mostly handling

00:25:22.680 --> 00:25:23.360
with regexes

00:25:23.360 --> 00:25:25.000
because they have

00:25:25.000 --> 00:25:26.860
a more restricted format.

00:25:26.860 --> 00:25:27.580
Jinja 2,

00:25:27.580 --> 00:25:28.300
you can't do that.

00:25:28.300 --> 00:25:28.600
Jinja,

00:25:28.600 --> 00:25:30.060
we need like a full

00:25:30.060 --> 00:25:30.840
HTML

00:25:30.840 --> 00:25:32.100
slash Jinja parser

00:25:32.100 --> 00:25:32.860
to be able to

00:25:32.860 --> 00:25:33.920
figure out

00:25:33.920 --> 00:25:35.080
how it all works.

00:25:35.080 --> 00:25:37.000
So that's on our wish list.

00:25:37.000 --> 00:25:37.840
We'd love to have it

00:25:37.840 --> 00:25:39.020
and we just

00:25:39.020 --> 00:25:40.000
haven't had a chance

00:25:40.000 --> 00:25:40.720
to get to it yet

00:25:40.720 --> 00:25:41.680
because turns out

00:25:41.680 --> 00:25:42.300
writing a parser

00:25:42.300 --> 00:25:42.940
is a big task.

00:25:42.940 --> 00:25:44.420
Yeah, I'm sure that it is.

00:25:44.420 --> 00:25:46.000
So if somebody's out there

00:25:46.000 --> 00:25:46.260
listening,

00:25:46.260 --> 00:25:46.660
they're like,

00:25:46.660 --> 00:25:47.300
I could totally

00:25:47.300 --> 00:25:48.040
write that parser.

00:25:48.040 --> 00:25:49.360
Do you guys take

00:25:49.360 --> 00:25:50.420
contributions and stuff?

00:25:50.420 --> 00:25:51.140
Absolutely.

00:25:51.140 --> 00:25:52.160
GitHub.com

00:25:52.160 --> 00:25:53.000
slash Microsoft

00:25:53.000 --> 00:25:54.860
slash P-T-V-S.

00:25:54.860 --> 00:25:56.120
That's Python tools

00:25:56.120 --> 00:25:56.820
for Visual Studio

00:25:56.820 --> 00:25:58.280
and yeah,

00:25:58.280 --> 00:25:59.120
come let us know

00:25:59.120 --> 00:25:59.720
that you're interested.

00:25:59.720 --> 00:26:01.120
We're happy to help you out

00:26:01.120 --> 00:26:03.400
and we'll accept pull requests.

00:26:03.400 --> 00:26:04.360
We've already accepted one

00:26:04.360 --> 00:26:05.280
for our next big release.

00:26:05.280 --> 00:26:07.320
So people who are looking

00:26:07.320 --> 00:26:08.260
for brace completion,

00:26:08.260 --> 00:26:09.460
that was contributed

00:26:09.460 --> 00:26:11.000
by an external person

00:26:11.000 --> 00:26:12.320
who basically just came along

00:26:12.320 --> 00:26:12.600
and said,

00:26:12.600 --> 00:26:13.900
I really want this.

00:26:13.900 --> 00:26:15.000
I'm willing to do it.

00:26:15.000 --> 00:26:15.820
Here's the code.

00:26:15.820 --> 00:26:16.460
What do you think?

00:26:16.460 --> 00:26:17.000
Oh, lovely.

00:26:17.000 --> 00:26:30.840
This episode is brought

00:26:30.840 --> 00:26:32.020
to you by OpBeat.

00:26:32.020 --> 00:26:33.620
OpBeat is application

00:26:33.620 --> 00:26:34.860
monitoring for developers.

00:26:34.860 --> 00:26:36.200
It's performance monitoring,

00:26:36.200 --> 00:26:36.840
error logging,

00:26:36.840 --> 00:26:37.500
release tracking,

00:26:37.500 --> 00:26:38.080
and workflow

00:26:38.080 --> 00:26:39.220
in one simple product.

00:26:39.220 --> 00:26:40.620
OpBeat is integrated

00:26:40.620 --> 00:26:41.580
with your code base

00:26:41.580 --> 00:26:42.440
and makes monitoring

00:26:42.440 --> 00:26:42.940
and debugging

00:26:42.940 --> 00:26:44.000
of your production apps

00:26:44.000 --> 00:26:44.760
much faster

00:26:44.760 --> 00:26:45.960
and your code better.

00:26:46.760 --> 00:26:47.480
OpBeat is free

00:26:47.480 --> 00:26:48.280
for an unlimited

00:26:48.280 --> 00:26:49.080
number of users

00:26:49.080 --> 00:26:50.380
and starting today,

00:26:50.380 --> 00:26:51.480
December 1st,

00:26:51.480 --> 00:26:52.560
OpBeat is announcing

00:26:52.560 --> 00:26:53.640
that their Flask support

00:26:53.640 --> 00:26:55.060
is graduating from beta

00:26:55.060 --> 00:26:56.620
to a full commercial product.

00:26:56.620 --> 00:26:58.280
Visit opbeat.com

00:26:58.280 --> 00:26:59.180
slash Flask

00:26:59.180 --> 00:27:00.560
to get started today.

00:27:08.560 --> 00:27:10.320
So one thing that I saw

00:27:10.320 --> 00:27:11.580
that you guys can do,

00:27:11.580 --> 00:27:13.140
I think it's sort of special

00:27:13.140 --> 00:27:14.800
because the deep relationship

00:27:14.800 --> 00:27:16.440
with C++ and C

00:27:16.440 --> 00:27:17.340
and Visual Studio.

00:27:17.340 --> 00:27:18.040
Like,

00:27:18.040 --> 00:27:19.040
my first experience

00:27:19.040 --> 00:27:19.660
with Visual Studio

00:27:19.660 --> 00:27:22.160
was with Visual C++

00:27:22.160 --> 00:27:23.360
1.52

00:27:23.360 --> 00:27:24.960
back in like 1994

00:27:24.960 --> 00:27:25.420
or something.

00:27:25.420 --> 00:27:26.420
So it's been C++

00:27:26.420 --> 00:27:27.780
capable for quite a while.

00:27:27.780 --> 00:27:28.980
And one of the things

00:27:28.980 --> 00:27:29.460
you can do

00:27:29.460 --> 00:27:30.240
is you can like

00:27:30.240 --> 00:27:31.440
mix mode,

00:27:31.440 --> 00:27:31.840
you called it

00:27:31.840 --> 00:27:32.600
mix mode debugging,

00:27:32.600 --> 00:27:32.900
right?

00:27:32.900 --> 00:27:33.820
That sounded pretty cool.

00:27:33.820 --> 00:27:34.520
Can you talk about that?

00:27:34.640 --> 00:27:36.380
Yeah, so it's actually

00:27:36.380 --> 00:27:37.820
one of our most popular features.

00:27:37.820 --> 00:27:39.480
It's unique to Visual Studio.

00:27:39.480 --> 00:27:40.380
We're not aware

00:27:40.380 --> 00:27:41.060
of any other

00:27:41.060 --> 00:27:42.080
development environment

00:27:42.080 --> 00:27:43.240
out there that can do this.

00:27:43.240 --> 00:27:44.920
Though GDB has some extensions

00:27:44.920 --> 00:27:46.420
that get kind of close.

00:27:46.420 --> 00:27:48.080
What it essentially is

00:27:48.080 --> 00:27:49.420
is when you have

00:27:49.420 --> 00:27:50.280
Python code calling

00:27:50.280 --> 00:27:51.340
into a C module,

00:27:51.340 --> 00:27:52.820
so one that you've written

00:27:52.820 --> 00:27:53.640
and built yourself,

00:27:53.640 --> 00:27:54.640
when we have

00:27:54.640 --> 00:27:55.560
the debugging information,

00:27:55.560 --> 00:27:56.920
we can give you

00:27:56.920 --> 00:27:57.900
a debugging view

00:27:57.900 --> 00:27:59.380
of both the Python

00:27:59.380 --> 00:28:00.720
and the C code simultaneously.

00:28:00.720 --> 00:28:02.520
So you can set

00:28:02.520 --> 00:28:03.760
a breakpoint in the C code.

00:28:03.760 --> 00:28:04.500
You can set

00:28:04.500 --> 00:28:05.700
breakpoints in the Python code.

00:28:05.700 --> 00:28:06.920
You can inspect variables

00:28:06.920 --> 00:28:07.960
in each one

00:28:07.960 --> 00:28:08.900
and see,

00:28:08.900 --> 00:28:10.080
so from the C code,

00:28:10.080 --> 00:28:11.420
oh, I've got a PyObject star.

00:28:11.420 --> 00:28:12.860
If I hover over it

00:28:12.860 --> 00:28:13.360
and have a look,

00:28:13.360 --> 00:28:13.880
it'll show me

00:28:13.880 --> 00:28:14.780
what it would look like

00:28:14.780 --> 00:28:15.720
as a Python object,

00:28:15.720 --> 00:28:16.340
whether, you know,

00:28:16.340 --> 00:28:17.280
a list of items

00:28:17.280 --> 00:28:17.960
or a tuple

00:28:17.960 --> 00:28:18.540
or a dictionary

00:28:18.540 --> 00:28:21.000
and step between

00:28:21.000 --> 00:28:22.480
the two different worlds.

00:28:22.480 --> 00:28:23.120
And so you end up

00:28:23.120 --> 00:28:23.920
with this call stack

00:28:23.920 --> 00:28:24.880
that goes Python,

00:28:24.880 --> 00:28:25.520
Python, Python,

00:28:25.520 --> 00:28:27.120
Python, C, C, C, C,

00:28:27.120 --> 00:28:28.040
Python, Python, Python,

00:28:28.040 --> 00:28:30.640
which is amazingly helpful

00:28:30.640 --> 00:28:31.200
when you're trying

00:28:31.200 --> 00:28:33.340
to debug native modules.

00:28:33.340 --> 00:28:34.360
It's actually something

00:28:34.360 --> 00:28:35.700
that I had to do a lot

00:28:35.700 --> 00:28:36.700
when I first started

00:28:36.700 --> 00:28:38.000
and we didn't have this feature.

00:28:38.000 --> 00:28:39.740
So I know how incredibly

00:28:39.740 --> 00:28:40.820
painful it is to do

00:28:40.820 --> 00:28:41.720
without having

00:28:41.720 --> 00:28:43.760
this sort of layer on top

00:28:43.760 --> 00:28:44.480
that shows you

00:28:44.480 --> 00:28:46.060
all the actual Python values

00:28:46.060 --> 00:28:47.520
that you'd be missing otherwise.

00:28:47.520 --> 00:28:48.720
That is super helpful.

00:28:48.720 --> 00:28:49.440
So I guess

00:28:49.440 --> 00:28:50.060
anyone out there

00:28:50.060 --> 00:28:50.420
is listening

00:28:50.420 --> 00:28:51.000
who's writing

00:28:51.000 --> 00:28:52.280
some sort of C extension

00:28:52.280 --> 00:28:53.600
and wants to help

00:28:53.600 --> 00:28:54.140
debugging it,

00:28:54.140 --> 00:28:54.700
you know,

00:28:54.700 --> 00:28:56.660
try the free Visual Studio

00:28:56.660 --> 00:28:58.460
version with Python tools

00:28:58.460 --> 00:28:58.840
included.

00:28:58.840 --> 00:28:59.840
That'd be awesome.

00:28:59.840 --> 00:29:00.940
So you want to talk

00:29:00.940 --> 00:29:01.540
about some of the

00:29:01.540 --> 00:29:02.520
other project types?

00:29:02.820 --> 00:29:03.980
one of the things

00:29:03.980 --> 00:29:04.860
that seems like

00:29:04.860 --> 00:29:06.300
Microsoft is up to

00:29:06.300 --> 00:29:06.900
these days,

00:29:06.900 --> 00:29:08.440
last four,

00:29:08.440 --> 00:29:09.220
three or four years,

00:29:09.220 --> 00:29:10.600
ever since such a

00:29:10.600 --> 00:29:11.620
Nadella's taken over,

00:29:11.620 --> 00:29:11.960
I guess,

00:29:11.960 --> 00:29:13.740
is you guys seem

00:29:13.740 --> 00:29:15.000
to be all in on Azure.

00:29:15.000 --> 00:29:15.920
And so you could actually

00:29:15.920 --> 00:29:16.880
have support for Python

00:29:16.880 --> 00:29:18.260
and sort of deploying

00:29:18.260 --> 00:29:19.160
straight out of Visual Studio

00:29:19.160 --> 00:29:20.840
into like a web app

00:29:20.840 --> 00:29:22.520
running on Azure, right?

00:29:22.660 --> 00:29:24.260
Yeah, so Azure web apps,

00:29:24.260 --> 00:29:25.720
kind of the highest level,

00:29:25.720 --> 00:29:27.720
most managed platform,

00:29:27.720 --> 00:29:28.060
I guess,

00:29:28.060 --> 00:29:29.040
for deploying websites.

00:29:29.040 --> 00:29:30.740
It's really,

00:29:30.740 --> 00:29:31.780
really quick to just push

00:29:31.780 --> 00:29:33.640
up the code for a site

00:29:33.640 --> 00:29:34.160
to,

00:29:34.160 --> 00:29:35.280
and now you have

00:29:35.280 --> 00:29:35.940
an active website.

00:29:35.940 --> 00:29:36.680
So there's no setting

00:29:36.680 --> 00:29:37.380
up machines,

00:29:37.380 --> 00:29:38.280
there's no installing

00:29:38.280 --> 00:29:39.960
web servers

00:29:39.960 --> 00:29:40.920
or doing some

00:29:40.920 --> 00:29:42.120
machine level configuration.

00:29:42.120 --> 00:29:44.820
It is within a minute

00:29:44.820 --> 00:29:45.500
of saying,

00:29:45.500 --> 00:29:46.400
I would like a website.

00:29:46.400 --> 00:29:47.320
You've got a website,

00:29:47.320 --> 00:29:48.540
which is really,

00:29:48.540 --> 00:29:49.040
really cool.

00:29:49.140 --> 00:29:49.940
And so the support

00:29:49.940 --> 00:29:50.700
that we have

00:29:50.700 --> 00:29:52.220
inside Visual Studio

00:29:52.220 --> 00:29:52.700
for that

00:29:52.700 --> 00:29:54.100
just brings that down.

00:29:54.100 --> 00:29:54.900
It's just bringing

00:29:54.900 --> 00:29:55.780
the click count down

00:29:55.780 --> 00:29:56.440
because you can

00:29:56.440 --> 00:29:57.720
do all of this

00:29:57.720 --> 00:29:58.740
through FTP

00:29:58.740 --> 00:30:00.100
or you can do it

00:30:00.100 --> 00:30:01.820
through via a Git repository.

00:30:01.820 --> 00:30:03.160
And then there's

00:30:03.160 --> 00:30:04.220
sort of the one click,

00:30:04.220 --> 00:30:05.560
I have my files here

00:30:05.560 --> 00:30:06.160
on my machine,

00:30:06.160 --> 00:30:07.280
I want them on that machine,

00:30:07.280 --> 00:30:08.680
just go and do it

00:30:08.680 --> 00:30:09.660
and we'll go off and do it.

00:30:09.660 --> 00:30:10.880
I really like the websites

00:30:10.880 --> 00:30:12.180
that you guys have in Azure.

00:30:12.180 --> 00:30:13.700
Like if I need a little

00:30:13.700 --> 00:30:14.760
small website

00:30:14.760 --> 00:30:15.580
that I can just spin up

00:30:15.580 --> 00:30:16.080
really quick,

00:30:16.080 --> 00:30:17.940
my first thought often

00:30:17.940 --> 00:30:18.980
is just go to Azure

00:30:18.980 --> 00:30:19.420
because there's

00:30:19.420 --> 00:30:20.240
nothing to set up.

00:30:20.240 --> 00:30:21.260
And you can have

00:30:21.260 --> 00:30:22.540
up to 10 sites,

00:30:22.540 --> 00:30:22.860
I think,

00:30:22.860 --> 00:30:23.460
for free,

00:30:23.460 --> 00:30:25.120
like 100% free forever.

00:30:25.120 --> 00:30:25.880
That's pretty awesome.

00:30:25.880 --> 00:30:26.420
Yeah,

00:30:26.420 --> 00:30:27.540
I think 10's the limit there.

00:30:27.540 --> 00:30:27.900
And I mean,

00:30:27.900 --> 00:30:28.640
if you want to try it

00:30:28.640 --> 00:30:29.720
without even signing up,

00:30:29.720 --> 00:30:30.640
then you can go to,

00:30:30.640 --> 00:30:31.220
I think it's

00:30:31.220 --> 00:30:33.120
try.azurewebsites.net

00:30:33.120 --> 00:30:34.360
and we'll give you

00:30:34.360 --> 00:30:35.540
a free site for an hour

00:30:35.540 --> 00:30:37.880
without any sign up,

00:30:37.880 --> 00:30:38.560
no credit cards

00:30:38.560 --> 00:30:39.220
or anything at all.

00:30:39.220 --> 00:30:40.540
We'll just give you a site,

00:30:40.540 --> 00:30:41.120
we'll give you

00:30:41.120 --> 00:30:42.000
a Git repository

00:30:42.000 --> 00:30:42.900
and so you can push

00:30:42.900 --> 00:30:43.840
directly to the site

00:30:43.840 --> 00:30:46.340
and have a website running.

00:30:46.340 --> 00:30:48.080
And there's a whole lot

00:30:48.080 --> 00:30:49.020
of templates in there

00:30:49.020 --> 00:30:50.100
if you want to start

00:30:50.100 --> 00:30:50.640
from a Django

00:30:50.640 --> 00:30:51.240
or a Bottle

00:30:51.240 --> 00:30:52.520
or a Flask site

00:30:52.520 --> 00:30:53.700
or if you're interested

00:30:53.700 --> 00:30:54.860
in doing it in PHP

00:30:54.860 --> 00:30:55.580
or Node.js,

00:30:55.580 --> 00:30:56.420
we have like,

00:30:56.420 --> 00:30:57.400
all of the languages

00:30:57.400 --> 00:30:58.480
are supported for websites

00:30:58.480 --> 00:31:00.020
and so that

00:31:00.020 --> 00:31:01.960
try.azurewebsites.net

00:31:01.960 --> 00:31:03.180
is just a really quick way

00:31:03.180 --> 00:31:04.680
to get a website going

00:31:04.680 --> 00:31:05.900
and see whether

00:31:05.900 --> 00:31:07.180
it does what you want it to.

00:31:07.280 --> 00:31:08.100
another one that I saw

00:31:08.100 --> 00:31:09.740
that I have no experience with

00:31:09.740 --> 00:31:10.580
so you'll have to tell me

00:31:10.580 --> 00:31:11.800
a little bit about it

00:31:11.800 --> 00:31:14.040
is when I was playing

00:31:14.040 --> 00:31:15.460
with the Python projects,

00:31:15.460 --> 00:31:16.060
I saw that you have

00:31:16.060 --> 00:31:18.160
a Windows Internet of Things core,

00:31:18.160 --> 00:31:19.160
maybe Windows core

00:31:19.160 --> 00:31:19.960
for Internet of Things,

00:31:19.960 --> 00:31:21.600
as a Python project type.

00:31:21.600 --> 00:31:22.040
What's that?

00:31:22.040 --> 00:31:22.960
There's a team

00:31:22.960 --> 00:31:24.180
at Microsoft

00:31:24.180 --> 00:31:24.660
at the moment

00:31:24.660 --> 00:31:25.460
that's been working

00:31:25.460 --> 00:31:26.820
on what's known

00:31:26.820 --> 00:31:28.000
as Windows IoT core.

00:31:28.000 --> 00:31:29.300
It's basically

00:31:29.300 --> 00:31:30.140
a version of Windows

00:31:30.140 --> 00:31:31.260
that is really,

00:31:31.260 --> 00:31:32.240
really stripped down.

00:31:32.240 --> 00:31:33.520
It's still sort of

00:31:33.520 --> 00:31:34.280
the latest builds

00:31:34.280 --> 00:31:34.720
of Windows

00:31:34.720 --> 00:31:35.660
but there's a lot

00:31:35.660 --> 00:31:36.940
of unnecessary things removed

00:31:36.940 --> 00:31:38.080
and it's really designed

00:31:38.080 --> 00:31:38.620
to be run

00:31:38.620 --> 00:31:40.400
on like Raspberry Pi 2

00:31:40.400 --> 00:31:41.460
or sort of

00:31:41.460 --> 00:31:42.680
about that scale devices

00:31:42.680 --> 00:31:43.600
for sort of

00:31:43.600 --> 00:31:44.120
high level

00:31:44.120 --> 00:31:44.880
Internet of Things

00:31:44.880 --> 00:31:46.000
type tasks.

00:31:46.000 --> 00:31:46.540
So it's not

00:31:46.540 --> 00:31:47.360
the little tiny

00:31:47.360 --> 00:31:48.440
microcontroller device

00:31:48.440 --> 00:31:49.400
that's just got

00:31:49.400 --> 00:31:50.440
a sensor attached to it

00:31:50.440 --> 00:31:51.340
but something bigger

00:31:51.340 --> 00:31:52.360
where maybe you've got

00:31:52.360 --> 00:31:53.540
a running process

00:31:53.540 --> 00:31:54.800
that's going to pull down

00:31:54.800 --> 00:31:55.580
a whole lot of data

00:31:55.580 --> 00:31:56.200
off the Internet,

00:31:56.200 --> 00:31:57.520
do some processing,

00:31:57.520 --> 00:31:58.440
display it on

00:31:58.440 --> 00:31:59.200
an attached

00:31:59.200 --> 00:32:01.020
screen or device

00:32:01.020 --> 00:32:01.640
of some sort

00:32:01.640 --> 00:32:03.240
and that platform

00:32:03.240 --> 00:32:04.540
has a slightly

00:32:04.540 --> 00:32:05.120
different app

00:32:05.120 --> 00:32:05.880
deployment model

00:32:05.880 --> 00:32:07.040
than on like

00:32:07.040 --> 00:32:07.960
the Raspberry Pi OS

00:32:07.960 --> 00:32:09.840
or some of the other

00:32:09.840 --> 00:32:10.560
IoT things.

00:32:10.560 --> 00:32:12.080
So it is running Windows.

00:32:12.080 --> 00:32:13.400
One of the big benefits

00:32:13.400 --> 00:32:14.360
of that is the security

00:32:14.360 --> 00:32:15.180
you get out of it

00:32:15.180 --> 00:32:16.460
in terms of

00:32:16.460 --> 00:32:17.800
you can't just run

00:32:17.800 --> 00:32:19.000
unsigned code on it,

00:32:19.000 --> 00:32:20.080
you can't jump outside

00:32:20.080 --> 00:32:20.760
of the sandbox

00:32:20.760 --> 00:32:21.620
that the code is running

00:32:21.620 --> 00:32:21.960
within

00:32:21.960 --> 00:32:23.460
and it has a lot

00:32:23.460 --> 00:32:24.120
of those benefits

00:32:24.120 --> 00:32:25.380
and what that means

00:32:25.380 --> 00:32:25.900
is that you need

00:32:25.900 --> 00:32:26.300
to go through

00:32:26.300 --> 00:32:27.220
a couple of extra steps

00:32:27.220 --> 00:32:28.220
to deploy code to it

00:32:28.220 --> 00:32:28.860
in the first place.

00:32:28.860 --> 00:32:29.680
So that template

00:32:29.680 --> 00:32:30.900
is actually very different

00:32:30.900 --> 00:32:32.060
from all the other

00:32:32.060 --> 00:32:32.860
templates we have.

00:32:33.220 --> 00:32:33.680
but it is a good

00:32:33.680 --> 00:32:34.800
starting point for IoT.

00:32:34.800 --> 00:32:35.980
You jump into that,

00:32:35.980 --> 00:32:37.380
you get a special

00:32:37.380 --> 00:32:38.260
version of Python

00:32:38.260 --> 00:32:39.400
that we had to rebuild

00:32:39.400 --> 00:32:40.640
so it's Python 3.5

00:32:40.640 --> 00:32:42.400
rebuilt to run on

00:32:42.400 --> 00:32:43.280
IoT Core.

00:32:43.280 --> 00:32:45.100
I believe something

00:32:45.100 --> 00:32:46.260
like 95%

00:32:46.260 --> 00:32:46.980
of the functionality

00:32:46.980 --> 00:32:47.640
is there.

00:32:47.640 --> 00:32:48.960
There's a few features

00:32:48.960 --> 00:32:49.860
that had to be removed

00:32:49.860 --> 00:32:51.320
because they would

00:32:51.320 --> 00:32:52.580
not work within

00:32:52.580 --> 00:32:53.060
the sandbox

00:32:53.060 --> 00:32:53.740
that's provided

00:32:53.740 --> 00:32:54.980
but within that

00:32:54.980 --> 00:32:55.800
you can set up

00:32:55.800 --> 00:32:57.040
a background service,

00:32:57.040 --> 00:32:57.860
it can do network

00:32:57.860 --> 00:32:58.300
access,

00:32:58.300 --> 00:32:59.440
it can do processing

00:32:59.440 --> 00:33:00.820
and all of that

00:33:00.820 --> 00:33:01.720
will then be

00:33:01.720 --> 00:33:02.440
easily deployed

00:33:02.440 --> 00:33:04.020
to Raspberry Pi 2

00:33:04.020 --> 00:33:05.420
or any device,

00:33:05.420 --> 00:33:06.520
I forget the other

00:33:06.520 --> 00:33:07.900
ones that it will run on

00:33:07.900 --> 00:33:08.460
but anything that

00:33:08.460 --> 00:33:09.380
Windows IoT Core

00:33:09.380 --> 00:33:10.040
will run on

00:33:10.040 --> 00:33:11.240
can run those

00:33:11.240 --> 00:33:12.060
Python applications

00:33:12.060 --> 00:33:13.660
and from within

00:33:13.660 --> 00:33:14.080
Visual Studio

00:33:14.080 --> 00:33:15.300
you have sort of

00:33:15.300 --> 00:33:15.860
that one click

00:33:15.860 --> 00:33:16.700
deploy and run,

00:33:16.700 --> 00:33:18.120
you can F5

00:33:18.120 --> 00:33:19.120
to deploy and debug

00:33:19.120 --> 00:33:20.000
and we'll use

00:33:20.000 --> 00:33:20.880
our remote debugger

00:33:20.880 --> 00:33:21.700
to attach to it

00:33:21.700 --> 00:33:22.720
and you'll get

00:33:22.720 --> 00:33:23.780
the full Visual Studio

00:33:23.780 --> 00:33:24.900
experience of stepping

00:33:24.900 --> 00:33:25.260
through,

00:33:25.260 --> 00:33:26.220
inspecting variables

00:33:26.220 --> 00:33:27.720
while running

00:33:27.720 --> 00:33:28.760
on a little

00:33:28.760 --> 00:33:29.420
tiny device.

00:33:29.420 --> 00:33:30.240
That sounds awesome.

00:33:30.240 --> 00:33:31.320
I should check that out.

00:33:31.320 --> 00:33:32.700
Yeah, and not to

00:33:32.700 --> 00:33:33.440
exclude the other ones,

00:33:33.440 --> 00:33:34.180
if you are working

00:33:34.180 --> 00:33:35.180
on an original

00:33:35.180 --> 00:33:35.880
Raspberry Pi

00:33:35.880 --> 00:33:37.160
or a different OS

00:33:37.160 --> 00:33:38.500
then Visual Studio

00:33:38.500 --> 00:33:39.820
has remote debugging

00:33:39.820 --> 00:33:40.380
for Python

00:33:40.380 --> 00:33:41.080
so it's a little

00:33:41.080 --> 00:33:41.820
module that

00:33:41.820 --> 00:33:42.520
you can put

00:33:42.520 --> 00:33:43.080
with your code

00:33:43.080 --> 00:33:44.520
on any platform

00:33:44.520 --> 00:33:45.420
on clusters

00:33:45.420 --> 00:33:46.260
of Raspberry Pis

00:33:46.260 --> 00:33:47.420
and use Visual Studio

00:33:47.420 --> 00:33:48.540
to do their debugging

00:33:48.540 --> 00:33:50.420
by connecting to it

00:33:50.420 --> 00:33:51.720
from their Windows machine.

00:33:51.720 --> 00:33:52.360
That I haven't

00:33:52.360 --> 00:33:52.900
got to play with

00:33:52.900 --> 00:33:53.340
but it sounds

00:33:53.340 --> 00:33:53.840
really handy.

00:33:53.840 --> 00:33:54.380
Awesome.

00:33:54.380 --> 00:33:55.300
Can you give us

00:33:55.300 --> 00:33:55.980
a glimpse

00:33:55.980 --> 00:33:56.860
of maybe

00:33:56.860 --> 00:33:57.780
something that's coming

00:33:57.780 --> 00:33:58.820
that people don't know about

00:33:58.820 --> 00:33:59.660
like a feature

00:33:59.660 --> 00:34:00.460
that's under development

00:34:00.460 --> 00:34:01.140
that's pretty cool?

00:34:01.140 --> 00:34:01.900
Basically everything

00:34:01.900 --> 00:34:02.520
that we do

00:34:02.520 --> 00:34:03.600
that we're actually doing

00:34:03.600 --> 00:34:04.580
is going to show up

00:34:04.580 --> 00:34:05.400
on our GitHub site

00:34:05.400 --> 00:34:06.180
so if people go

00:34:06.180 --> 00:34:06.960
and look at the commits

00:34:06.960 --> 00:34:07.620
there you can see

00:34:07.620 --> 00:34:08.780
what's definitely

00:34:08.780 --> 00:34:10.180
coming sometime soon.

00:34:10.180 --> 00:34:11.380
There's a lot of things

00:34:11.380 --> 00:34:12.220
that we talk about

00:34:12.220 --> 00:34:13.920
that don't always

00:34:13.920 --> 00:34:14.480
make it past

00:34:14.480 --> 00:34:15.320
the talking stage

00:34:15.320 --> 00:34:16.620
so it's kind of

00:34:16.620 --> 00:34:17.060
hard to say

00:34:17.060 --> 00:34:18.300
from this huge list

00:34:18.300 --> 00:34:18.940
of stuff we say

00:34:18.940 --> 00:34:19.520
yeah we'd love

00:34:19.520 --> 00:34:20.060
to do this

00:34:20.060 --> 00:34:20.740
we'd love to do this

00:34:20.740 --> 00:34:21.640
which ones will make it

00:34:21.640 --> 00:34:22.420
to the stage

00:34:22.420 --> 00:34:23.640
of we're actually doing it.

00:34:23.640 --> 00:34:24.760
One thing that is

00:34:24.760 --> 00:34:26.060
getting very close

00:34:26.060 --> 00:34:27.020
to that second step

00:34:27.020 --> 00:34:28.780
and is support

00:34:28.780 --> 00:34:29.780
for Visual Studio Code

00:34:29.780 --> 00:34:30.980
so people who

00:34:30.980 --> 00:34:31.940
may not be familiar

00:34:31.940 --> 00:34:32.380
with that

00:34:32.380 --> 00:34:32.820
recently

00:34:32.820 --> 00:34:34.500
in fact about a year ago

00:34:34.500 --> 00:34:36.460
Microsoft made the first release

00:34:36.460 --> 00:34:37.440
of Visual Studio Code

00:34:37.440 --> 00:34:39.060
which is a cross-platform

00:34:39.060 --> 00:34:40.380
version of Visual Studio

00:34:40.380 --> 00:34:41.780
it's lighter weight

00:34:41.780 --> 00:34:43.160
it doesn't have a lot

00:34:43.160 --> 00:34:44.800
of the advanced functionality yet

00:34:44.800 --> 00:34:47.080
but it's much more comparable

00:34:47.080 --> 00:34:47.700
to something like

00:34:47.700 --> 00:34:48.400
Sublime Text

00:34:48.400 --> 00:34:49.500
in terms of

00:34:49.500 --> 00:34:51.280
I have a directory of code here

00:34:51.280 --> 00:34:52.420
I just need to jump around

00:34:52.420 --> 00:34:53.240
in it a bit

00:34:53.240 --> 00:34:54.460
I still want good

00:34:54.460 --> 00:34:55.120
IntelliSense

00:34:55.120 --> 00:34:56.560
I still want the ability

00:34:56.560 --> 00:34:57.540
to navigate

00:34:57.540 --> 00:34:58.480
based off

00:34:58.480 --> 00:34:59.440
code semantics

00:34:59.440 --> 00:35:00.760
rather than simple searching

00:35:00.760 --> 00:35:02.260
I need git integration

00:35:02.260 --> 00:35:04.000
I want F5 to debug

00:35:04.000 --> 00:35:05.800
and we're at the point

00:35:05.800 --> 00:35:06.060
where

00:35:06.060 --> 00:35:08.000
99% certain

00:35:08.000 --> 00:35:09.060
that we'll be committing

00:35:09.060 --> 00:35:09.400
to

00:35:09.400 --> 00:35:10.640
like really beefing up

00:35:10.640 --> 00:35:11.580
the Python support there

00:35:11.580 --> 00:35:13.000
it has basic support

00:35:13.000 --> 00:35:13.920
for a lot of languages

00:35:13.920 --> 00:35:14.760
including Python

00:35:14.760 --> 00:35:16.080
but there's

00:35:16.080 --> 00:35:17.560
not yet any debugging

00:35:17.560 --> 00:35:18.160
there's

00:35:18.160 --> 00:35:19.240
very limited

00:35:19.240 --> 00:35:20.260
or no IntelliSense

00:35:20.260 --> 00:35:21.380
and launching

00:35:21.380 --> 00:35:21.880
is not

00:35:21.880 --> 00:35:22.820
quite there yet

00:35:22.820 --> 00:35:23.160
so there's

00:35:23.160 --> 00:35:24.360
a range of things

00:35:24.360 --> 00:35:24.920
to work on

00:35:24.920 --> 00:35:25.860
there's currently

00:35:25.860 --> 00:35:26.780
a community extension

00:35:26.780 --> 00:35:27.420
that's doing it

00:35:27.420 --> 00:35:28.620
and we're thrilled

00:35:28.620 --> 00:35:29.360
to see that

00:35:29.360 --> 00:35:29.820
the community

00:35:29.820 --> 00:35:30.280
has said

00:35:30.280 --> 00:35:31.060
hey we care enough

00:35:31.060 --> 00:35:31.540
about Python

00:35:31.540 --> 00:35:32.360
to make this happen

00:35:32.360 --> 00:35:32.920
regardless

00:35:32.920 --> 00:35:33.740
yeah that's great

00:35:33.740 --> 00:35:34.220
do you know

00:35:34.220 --> 00:35:35.140
the name of the extension

00:35:35.140 --> 00:35:36.480
so people can search for it

00:35:36.480 --> 00:35:37.260
or I can link to it

00:35:37.260 --> 00:35:38.260
the extension's Python

00:35:38.260 --> 00:35:38.900
so

00:35:38.900 --> 00:35:40.080
if you just

00:35:40.080 --> 00:35:41.820
X install Python

00:35:41.820 --> 00:35:43.400
from within Visual Studio Code

00:35:43.400 --> 00:35:43.900
you'll get it

00:35:43.900 --> 00:35:45.220
it will make it difficult

00:35:45.220 --> 00:35:45.680
for us

00:35:45.680 --> 00:35:46.480
if we put out

00:35:46.480 --> 00:35:47.820
another Python extension

00:35:47.820 --> 00:35:48.980
because we'll have to

00:35:48.980 --> 00:35:49.640
pick a different name

00:35:49.640 --> 00:35:50.380
oh yeah they really

00:35:50.380 --> 00:35:51.500
grabbed the main name

00:35:51.500 --> 00:35:51.980
didn't they

00:35:51.980 --> 00:35:53.080
yeah they went and took it

00:35:53.080 --> 00:35:54.080
so there's always

00:35:54.080 --> 00:35:54.560
a possibility

00:35:54.560 --> 00:35:55.640
that we'll get in touch

00:35:55.640 --> 00:35:57.000
with the guy who's created

00:35:57.000 --> 00:35:57.800
and say hey

00:35:57.800 --> 00:35:59.000
you've already got

00:35:59.000 --> 00:35:59.800
users

00:35:59.800 --> 00:36:00.400
you know

00:36:00.400 --> 00:36:01.220
everyone already loves

00:36:01.220 --> 00:36:01.620
this one

00:36:01.620 --> 00:36:02.820
can we contribute to it

00:36:02.820 --> 00:36:04.100
and then you know

00:36:04.100 --> 00:36:05.080
maybe we don't end up

00:36:05.080 --> 00:36:05.860
with a

00:36:05.860 --> 00:36:07.820
an official Microsoft one

00:36:07.820 --> 00:36:09.300
but we really beef up

00:36:09.300 --> 00:36:10.320
the community owned

00:36:10.320 --> 00:36:10.960
and driven one

00:36:10.960 --> 00:36:11.960
already with

00:36:11.960 --> 00:36:12.860
with all of the stuff

00:36:12.860 --> 00:36:13.340
that we've got

00:36:13.340 --> 00:36:14.840
from Visual Studio proper

00:36:14.840 --> 00:36:16.140
we'll try and bring that

00:36:16.140 --> 00:36:17.260
over to Visual Studio Code

00:36:17.260 --> 00:36:18.700
and get that out there

00:36:18.700 --> 00:36:19.020
so

00:36:19.020 --> 00:36:20.460
not quite sure

00:36:20.460 --> 00:36:21.720
how that looks right now

00:36:21.720 --> 00:36:22.400
not quite sure

00:36:22.400 --> 00:36:23.400
when it's going to be available

00:36:23.400 --> 00:36:24.140
but it's definitely

00:36:24.140 --> 00:36:24.820
something that

00:36:24.820 --> 00:36:25.660
is coming

00:36:25.660 --> 00:36:26.960
and so there will be

00:36:26.960 --> 00:36:27.860
cross-platform

00:36:27.860 --> 00:36:28.880
Visual Studio Code

00:36:28.880 --> 00:36:29.960
Python support

00:36:29.960 --> 00:36:30.520
coming soon

00:36:30.520 --> 00:36:31.300
yeah that's awesome

00:36:31.300 --> 00:36:32.440
it's nice to see

00:36:32.440 --> 00:36:33.180
Visual Studio Code

00:36:33.180 --> 00:36:33.760
coming along

00:36:33.760 --> 00:36:34.460
and with the whole

00:36:34.460 --> 00:36:35.360
.NET Core stuff

00:36:35.360 --> 00:36:36.780
and I talked to

00:36:36.780 --> 00:36:38.180
Brett Cannon

00:36:38.180 --> 00:36:39.160
he was on show 49

00:36:39.160 --> 00:36:40.060
about

00:36:40.060 --> 00:36:41.320
some of the

00:36:41.320 --> 00:36:42.320
the pigeon work

00:36:42.320 --> 00:36:43.260
that you guys

00:36:43.260 --> 00:36:43.740
are doing

00:36:43.740 --> 00:36:45.080
involving .NET Core

00:36:45.080 --> 00:36:45.820
and cross-platform

00:36:45.820 --> 00:36:46.800
so all those things

00:36:46.800 --> 00:36:47.360
are coming together

00:36:47.360 --> 00:36:47.940
really nicely

00:36:47.940 --> 00:36:51.080
but let's take it

00:36:51.080 --> 00:36:51.500
back to Windows

00:36:51.500 --> 00:36:52.300
for just a second

00:36:52.300 --> 00:36:52.680
so

00:36:52.680 --> 00:36:54.700
as somebody

00:36:54.700 --> 00:36:55.420
who teaches

00:36:55.420 --> 00:36:56.040
Python

00:36:56.040 --> 00:36:57.720
I want to say

00:36:57.720 --> 00:36:58.220
thank you

00:36:58.220 --> 00:36:58.740
for building

00:36:58.740 --> 00:36:59.360
the new

00:36:59.360 --> 00:37:00.360
Windows installer

00:37:00.360 --> 00:37:01.360
for CPython

00:37:01.360 --> 00:37:02.280
oh my god

00:37:02.280 --> 00:37:02.680
that has been

00:37:02.680 --> 00:37:03.420
such a nightmare

00:37:03.420 --> 00:37:04.740
that to try to

00:37:04.740 --> 00:37:05.680
you know

00:37:05.680 --> 00:37:06.680
people come to class

00:37:06.680 --> 00:37:07.780
they've got some

00:37:07.780 --> 00:37:08.760
crappy old laptop

00:37:08.760 --> 00:37:09.820
they got from their company

00:37:09.820 --> 00:37:10.300
you know

00:37:10.300 --> 00:37:11.100
it doesn't have

00:37:11.100 --> 00:37:12.400
Python on it

00:37:12.400 --> 00:37:13.980
and they want to get started

00:37:13.980 --> 00:37:15.240
and they forgot to check

00:37:15.240 --> 00:37:15.880
the little box

00:37:15.880 --> 00:37:16.760
put this in my path

00:37:16.760 --> 00:37:17.240
and it's just

00:37:17.240 --> 00:37:17.940
oh

00:37:17.940 --> 00:37:18.480
you know

00:37:18.480 --> 00:37:19.300
there were so many

00:37:19.300 --> 00:37:19.880
little gotchas

00:37:19.880 --> 00:37:21.440
and you recently

00:37:21.440 --> 00:37:22.060
updated that

00:37:22.060 --> 00:37:23.020
in a pretty major way

00:37:23.020 --> 00:37:23.280
right?

00:37:23.280 --> 00:37:24.220
yeah

00:37:24.220 --> 00:37:24.780
so

00:37:24.780 --> 00:37:26.620
what was it

00:37:26.620 --> 00:37:27.120
PyCon

00:37:27.120 --> 00:37:28.320
last year

00:37:28.320 --> 00:37:28.960
I think

00:37:28.960 --> 00:37:29.360
or

00:37:29.360 --> 00:37:30.300
might have been

00:37:30.300 --> 00:37:30.740
the year before

00:37:30.740 --> 00:37:31.120
2014

00:37:31.120 --> 00:37:31.780
I think

00:37:31.780 --> 00:37:33.040
the

00:37:33.040 --> 00:37:34.400
the person

00:37:34.400 --> 00:37:34.940
who was

00:37:34.940 --> 00:37:35.500
responsible

00:37:35.500 --> 00:37:36.260
for producing

00:37:36.260 --> 00:37:37.300
the builds

00:37:37.300 --> 00:37:38.020
of CPython

00:37:38.020 --> 00:37:38.580
for Windows

00:37:38.580 --> 00:37:39.860
effectively

00:37:39.860 --> 00:37:40.560
resigned

00:37:40.560 --> 00:37:41.160
and said

00:37:41.160 --> 00:37:41.980
I've

00:37:41.980 --> 00:37:42.660
you know

00:37:42.660 --> 00:37:43.780
I've got other things

00:37:43.780 --> 00:37:44.480
I need to step away

00:37:44.480 --> 00:37:44.900
for a bit

00:37:44.900 --> 00:37:45.760
so if someone else

00:37:45.760 --> 00:37:46.560
wants to take over

00:37:46.560 --> 00:37:47.040
then they're more

00:37:47.040 --> 00:37:47.660
than welcome to

00:37:47.660 --> 00:37:50.300
and

00:37:50.300 --> 00:37:51.680
thinking it wouldn't

00:37:51.680 --> 00:37:52.280
be that much work

00:37:52.280 --> 00:37:53.040
I put my hand up

00:37:53.040 --> 00:37:53.780
which

00:37:53.780 --> 00:37:55.020
turned out to be

00:37:55.020 --> 00:37:56.240
a silly thing to do

00:37:56.240 --> 00:37:57.100
but that's what I did

00:37:57.100 --> 00:37:58.360
and so since then

00:37:58.360 --> 00:37:58.860
I've been

00:37:58.860 --> 00:38:00.360
largely responsible

00:38:00.360 --> 00:38:00.780
for

00:38:00.780 --> 00:38:02.820
excuse me

00:38:02.820 --> 00:38:03.460
for a lot of

00:38:03.460 --> 00:38:04.540
Python on Windows

00:38:04.540 --> 00:38:07.540
one of the things

00:38:07.540 --> 00:38:08.180
that I've been

00:38:08.180 --> 00:38:08.980
really keen to do

00:38:08.980 --> 00:38:09.800
for a long time

00:38:09.800 --> 00:38:10.560
and was

00:38:10.560 --> 00:38:11.740
kind of going to

00:38:11.740 --> 00:38:12.460
contribute it anyway

00:38:12.460 --> 00:38:13.100
was to

00:38:13.100 --> 00:38:14.180
rewrite the installer

00:38:14.180 --> 00:38:16.360
and

00:38:16.360 --> 00:38:16.820
I mean

00:38:16.820 --> 00:38:17.800
frankly I'm still

00:38:17.800 --> 00:38:18.620
not entirely happy

00:38:18.620 --> 00:38:19.420
with where it's at

00:38:19.420 --> 00:38:19.900
but it's not

00:38:19.900 --> 00:38:20.340
something that you

00:38:20.340 --> 00:38:20.740
can change

00:38:20.740 --> 00:38:21.780
dramatically too often

00:38:21.780 --> 00:38:24.260
but one of the

00:38:24.260 --> 00:38:24.380
big

00:38:24.380 --> 00:38:25.060
well I can tell you

00:38:25.060 --> 00:38:26.380
it is a much

00:38:26.380 --> 00:38:27.660
nicer experience

00:38:27.660 --> 00:38:28.940
than it has been

00:38:28.940 --> 00:38:29.380
so I'm

00:38:29.380 --> 00:38:31.040
I can definitely

00:38:31.040 --> 00:38:32.400
say that

00:38:32.400 --> 00:38:32.820
so people

00:38:32.820 --> 00:38:33.380
who have

00:38:33.380 --> 00:38:33.840
tried to

00:38:33.840 --> 00:38:34.380
like set up

00:38:34.380 --> 00:38:35.160
Python on

00:38:35.160 --> 00:38:35.920
Windows before

00:38:35.920 --> 00:38:36.260
and be like

00:38:36.260 --> 00:38:37.020
oh here goes

00:38:37.020 --> 00:38:37.400
this thing

00:38:37.400 --> 00:38:37.800
it almost

00:38:37.800 --> 00:38:38.160
works

00:38:38.160 --> 00:38:39.600
it's a lot

00:38:39.600 --> 00:38:39.880
nicer

00:38:39.880 --> 00:38:40.340
so

00:38:40.340 --> 00:38:41.040
it may have

00:38:41.040 --> 00:38:41.540
ways to go

00:38:41.540 --> 00:38:42.080
but it's

00:38:42.080 --> 00:38:42.500
great

00:38:42.500 --> 00:38:42.860
yeah

00:38:42.860 --> 00:38:43.980
and I did

00:38:43.980 --> 00:38:44.400
achieve

00:38:44.400 --> 00:38:45.100
two of the

00:38:45.100 --> 00:38:45.500
big things

00:38:45.500 --> 00:38:45.900
that I wanted

00:38:45.900 --> 00:38:46.320
to do

00:38:46.320 --> 00:38:46.960
which was

00:38:46.960 --> 00:38:47.500
moving the

00:38:47.500 --> 00:38:47.820
default

00:38:47.820 --> 00:38:48.460
installation

00:38:48.460 --> 00:38:48.900
directory

00:38:48.900 --> 00:38:49.580
into

00:38:49.580 --> 00:38:50.340
somewhere

00:38:50.340 --> 00:38:50.900
more secure

00:38:50.900 --> 00:38:51.800
because

00:38:51.800 --> 00:38:52.400
historically

00:38:52.400 --> 00:38:52.980
if you

00:38:52.980 --> 00:38:53.980
put Python

00:38:53.980 --> 00:38:54.380
in the root

00:38:54.380 --> 00:38:54.760
directory

00:38:54.760 --> 00:38:55.020
of your

00:38:55.020 --> 00:38:55.640
system drive

00:38:55.640 --> 00:38:56.640
anyone on

00:38:56.640 --> 00:38:57.060
that machine

00:38:57.060 --> 00:38:57.480
can write

00:38:57.480 --> 00:38:57.840
to it

00:38:57.840 --> 00:38:59.320
and that

00:38:59.320 --> 00:38:59.900
then means

00:38:59.900 --> 00:39:00.360
that

00:39:00.360 --> 00:39:01.080
someone

00:39:01.080 --> 00:39:01.340
who's

00:39:01.340 --> 00:39:01.580
not

00:39:01.580 --> 00:39:01.840
an

00:39:01.840 --> 00:39:02.300
administrative

00:39:02.300 --> 00:39:02.920
user

00:39:02.920 --> 00:39:03.500
can install

00:39:03.500 --> 00:39:03.760
whatever

00:39:03.760 --> 00:39:04.140
package

00:39:04.140 --> 00:39:04.620
they want

00:39:04.620 --> 00:39:05.380
and then

00:39:05.380 --> 00:39:05.800
if someone

00:39:05.800 --> 00:39:06.220
who is an

00:39:06.220 --> 00:39:06.440
admin

00:39:06.440 --> 00:39:07.140
runs

00:39:07.140 --> 00:39:07.600
that

00:39:07.600 --> 00:39:07.940
Python

00:39:07.940 --> 00:39:08.320
at all

00:39:08.320 --> 00:39:09.020
they're going

00:39:09.020 --> 00:39:09.420
to run

00:39:09.420 --> 00:39:10.020
that code

00:39:10.020 --> 00:39:10.400
that's been

00:39:10.400 --> 00:39:10.700
installed

00:39:10.700 --> 00:39:11.140
by someone

00:39:11.140 --> 00:39:11.860
who shouldn't

00:39:11.860 --> 00:39:12.500
have privileges

00:39:12.500 --> 00:39:13.040
to install

00:39:13.040 --> 00:39:13.480
it for them

00:39:13.480 --> 00:39:14.420
so that was

00:39:14.420 --> 00:39:15.200
always a security

00:39:15.200 --> 00:39:15.720
concern

00:39:15.720 --> 00:39:17.280
for a lot

00:39:17.280 --> 00:39:17.620
of Windows

00:39:17.620 --> 00:39:17.920
users

00:39:17.920 --> 00:39:18.240
a lot

00:39:18.240 --> 00:39:18.880
of corporations

00:39:18.880 --> 00:39:20.120
and so by

00:39:20.120 --> 00:39:20.800
moving it

00:39:20.800 --> 00:39:21.560
either into

00:39:21.560 --> 00:39:22.360
program files

00:39:22.360 --> 00:39:22.940
or into the

00:39:22.940 --> 00:39:23.560
user's install

00:39:23.560 --> 00:39:23.960
directory

00:39:23.960 --> 00:39:25.880
that mitigates

00:39:25.880 --> 00:39:26.780
that attack

00:39:26.780 --> 00:39:27.120
vector

00:39:27.120 --> 00:39:27.660
which is

00:39:27.660 --> 00:39:28.560
a real big

00:39:28.560 --> 00:39:28.900
improvement

00:39:28.900 --> 00:39:29.280
for a lot

00:39:29.280 --> 00:39:29.700
of people

00:39:29.700 --> 00:39:30.400
the other

00:39:30.400 --> 00:39:30.700
thing is

00:39:30.700 --> 00:39:31.060
a proper

00:39:31.060 --> 00:39:31.620
per user

00:39:31.620 --> 00:39:32.060
install

00:39:32.060 --> 00:39:33.600
so previously

00:39:33.600 --> 00:39:35.320
if you

00:39:35.320 --> 00:39:35.700
installed

00:39:35.700 --> 00:39:36.020
Python

00:39:36.020 --> 00:39:36.360
you could

00:39:36.360 --> 00:39:36.640
say

00:39:36.640 --> 00:39:37.100
install

00:39:37.100 --> 00:39:37.240
it

00:39:37.240 --> 00:39:37.400
just

00:39:37.400 --> 00:39:37.740
for me

00:39:37.740 --> 00:39:38.660
but you

00:39:38.660 --> 00:39:39.020
still had

00:39:39.020 --> 00:39:39.360
to be an

00:39:39.360 --> 00:39:39.720
administrator

00:39:39.720 --> 00:39:40.320
to actually

00:39:40.320 --> 00:39:40.840
install it

00:39:40.840 --> 00:39:41.740
so one of

00:39:41.740 --> 00:39:42.460
the big

00:39:42.460 --> 00:39:43.040
big changes

00:39:43.040 --> 00:39:43.500
that I made

00:39:43.500 --> 00:39:43.760
in that

00:39:43.760 --> 00:39:44.140
installer

00:39:44.140 --> 00:39:44.720
was so

00:39:44.720 --> 00:39:45.480
if you

00:39:45.480 --> 00:39:46.180
choose that

00:39:46.180 --> 00:39:47.100
and then you

00:39:47.100 --> 00:39:47.600
choose not

00:39:47.600 --> 00:39:48.060
to install

00:39:48.060 --> 00:39:48.600
the launcher

00:39:48.600 --> 00:39:49.260
for all

00:39:49.260 --> 00:39:49.560
users

00:39:49.560 --> 00:39:49.880
then you

00:39:49.880 --> 00:39:50.160
don't need

00:39:50.160 --> 00:39:50.460
to be an

00:39:50.460 --> 00:39:50.660
admin

00:39:50.660 --> 00:39:51.000
at all

00:39:51.000 --> 00:39:51.520
and we'll

00:39:51.520 --> 00:39:51.800
just go

00:39:51.800 --> 00:39:52.100
ahead and

00:39:52.100 --> 00:39:52.540
install

00:39:52.540 --> 00:39:53.440
Python

00:39:53.440 --> 00:39:54.060
without ever

00:39:54.060 --> 00:39:54.440
asking you

00:39:54.440 --> 00:39:54.860
to elevate

00:39:54.860 --> 00:39:56.020
so it's

00:39:56.020 --> 00:39:56.640
great for

00:39:56.640 --> 00:39:57.560
students who

00:39:57.560 --> 00:39:58.000
may not have

00:39:58.000 --> 00:39:58.480
full control

00:39:58.480 --> 00:39:58.760
of their

00:39:58.760 --> 00:39:59.180
machine

00:39:59.180 --> 00:40:00.320
people

00:40:00.320 --> 00:40:00.840
working at

00:40:00.840 --> 00:40:01.200
companies

00:40:01.200 --> 00:40:01.600
where the

00:40:01.600 --> 00:40:02.020
machines are

00:40:02.020 --> 00:40:02.540
locked down

00:40:02.540 --> 00:40:03.100
and they're

00:40:03.100 --> 00:40:03.420
not allowed

00:40:03.420 --> 00:40:03.700
to make

00:40:03.700 --> 00:40:04.220
changes to

00:40:04.220 --> 00:40:04.320
it

00:40:04.320 --> 00:40:04.540
you can

00:40:04.540 --> 00:40:04.980
still install

00:40:04.980 --> 00:40:05.320
Python

00:40:05.320 --> 00:40:06.120
3.5

00:40:06.120 --> 00:40:06.440
on those

00:40:06.440 --> 00:40:06.840
machines

00:40:06.840 --> 00:40:08.300
because we

00:40:08.300 --> 00:40:09.000
don't require

00:40:09.000 --> 00:40:10.080
to actually

00:40:10.080 --> 00:40:10.700
make changes

00:40:10.700 --> 00:40:10.980
to the

00:40:10.980 --> 00:40:11.300
machine

00:40:11.300 --> 00:40:12.020
we just

00:40:12.020 --> 00:40:12.360
put all

00:40:12.360 --> 00:40:12.740
of Python

00:40:12.740 --> 00:40:13.160
into a

00:40:13.160 --> 00:40:13.420
directory

00:40:13.420 --> 00:40:13.680
that you

00:40:13.680 --> 00:40:14.040
have full

00:40:14.040 --> 00:40:14.500
access to

00:40:14.500 --> 00:40:14.820
already

00:40:14.820 --> 00:40:16.560
yeah

00:40:16.560 --> 00:40:17.240
I've run

00:40:17.240 --> 00:40:17.580
into that

00:40:17.580 --> 00:40:17.980
problem

00:40:17.980 --> 00:40:18.880
more than

00:40:18.880 --> 00:40:19.160
once

00:40:19.160 --> 00:40:19.700
that people

00:40:19.700 --> 00:40:20.560
even though

00:40:20.560 --> 00:40:20.880
they're

00:40:20.880 --> 00:40:21.440
professional

00:40:21.440 --> 00:40:22.000
developers

00:40:22.000 --> 00:40:22.300
at a

00:40:22.300 --> 00:40:22.600
company

00:40:22.600 --> 00:40:22.880
they're

00:40:22.880 --> 00:40:23.280
still not

00:40:23.280 --> 00:40:23.520
given

00:40:23.520 --> 00:40:23.880
enough

00:40:23.880 --> 00:40:24.220
control

00:40:24.220 --> 00:40:24.560
of their

00:40:24.560 --> 00:40:25.620
machines

00:40:25.620 --> 00:40:26.120
to

00:40:26.120 --> 00:40:27.600
make

00:40:27.600 --> 00:40:27.940
system

00:40:27.940 --> 00:40:28.140
level

00:40:28.140 --> 00:40:28.420
changes

00:40:28.420 --> 00:40:28.760
which is

00:40:28.760 --> 00:40:28.980
kind of

00:40:28.980 --> 00:40:29.300
ridiculous

00:40:29.300 --> 00:40:29.840
but it's

00:40:29.840 --> 00:40:30.120
great that

00:40:30.120 --> 00:40:30.440
that's

00:40:30.440 --> 00:40:31.400
all there

00:40:31.400 --> 00:40:32.040
so very

00:40:32.040 --> 00:40:32.300
cool

00:40:32.300 --> 00:40:33.780
let's

00:40:33.780 --> 00:40:34.420
talk about

00:40:34.420 --> 00:40:34.860
build

00:40:34.860 --> 00:40:35.200
for a

00:40:35.200 --> 00:40:35.320
little

00:40:35.320 --> 00:40:35.620
bit

00:40:35.620 --> 00:40:37.200
so

00:40:37.200 --> 00:40:37.880
this is

00:40:37.880 --> 00:40:38.160
kind of

00:40:38.160 --> 00:40:38.360
like

00:40:38.360 --> 00:40:38.860
Microsoft's

00:40:38.860 --> 00:40:39.180
major

00:40:39.180 --> 00:40:39.580
developer

00:40:39.580 --> 00:40:40.060
conference

00:40:40.060 --> 00:40:41.020
and

00:40:41.020 --> 00:40:41.780
you

00:40:41.780 --> 00:40:41.940
were

00:40:41.940 --> 00:40:42.200
there

00:40:42.200 --> 00:40:42.560
I saw

00:40:42.560 --> 00:40:42.760
you were

00:40:42.760 --> 00:40:42.920
giving

00:40:42.920 --> 00:40:43.120
some

00:40:43.120 --> 00:40:43.540
talks

00:40:43.540 --> 00:40:43.720
on

00:40:43.720 --> 00:40:44.040
Python

00:40:44.040 --> 00:40:44.400
you were

00:40:44.400 --> 00:40:44.680
kind of

00:40:44.680 --> 00:40:45.100
spreading

00:40:45.100 --> 00:40:46.460
the

00:40:46.460 --> 00:40:47.180
good

00:40:47.180 --> 00:40:47.620
word

00:40:47.620 --> 00:40:48.320
of

00:40:48.320 --> 00:40:48.640
Python

00:40:48.640 --> 00:40:48.960
saying

00:40:48.960 --> 00:40:49.840
look I

00:40:49.840 --> 00:40:50.080
know

00:40:50.080 --> 00:40:50.400
a lot

00:40:50.400 --> 00:40:50.540
of you

00:40:50.540 --> 00:40:50.700
guys

00:40:50.700 --> 00:40:50.980
here

00:40:50.980 --> 00:40:51.820
that

00:40:51.820 --> 00:40:52.000
guy

00:40:52.000 --> 00:40:52.120
is

00:40:52.120 --> 00:40:52.260
doing

00:40:52.260 --> 00:40:52.720
C++

00:40:52.720 --> 00:40:53.260
you guys

00:40:53.260 --> 00:40:53.340
are

00:40:53.340 --> 00:40:53.460
all

00:40:53.460 --> 00:40:53.620
doing

00:40:53.620 --> 00:40:54.080
.NET

00:40:54.080 --> 00:40:55.040
but

00:40:55.040 --> 00:40:55.480
maybe

00:40:55.480 --> 00:40:55.740
you should

00:40:55.740 --> 00:40:56.120
consider

00:40:56.120 --> 00:40:56.680
Python

00:40:56.680 --> 00:40:57.480
can you

00:40:57.480 --> 00:40:57.700
maybe

00:40:57.700 --> 00:40:58.900
give us

00:40:58.900 --> 00:40:59.340
your

00:40:59.340 --> 00:41:00.560
impressions

00:41:00.560 --> 00:41:00.780
of

00:41:00.780 --> 00:41:01.820
what you

00:41:01.820 --> 00:41:01.980
guys

00:41:01.980 --> 00:41:02.320
announce

00:41:02.320 --> 00:41:03.120
this

00:41:03.120 --> 00:41:03.340
year

00:41:03.340 --> 00:41:03.460
and

00:41:03.460 --> 00:41:04.000
how

00:41:04.000 --> 00:41:04.080
did

00:41:04.080 --> 00:41:04.180
your

00:41:04.180 --> 00:41:04.420
session

00:41:04.420 --> 00:41:04.660
go

00:41:04.660 --> 00:41:06.080
build

00:41:06.080 --> 00:41:06.580
always

00:41:06.580 --> 00:41:06.760
has

00:41:06.760 --> 00:41:07.140
a lot

00:41:07.140 --> 00:41:07.240
of

00:41:07.240 --> 00:41:07.620
exciting

00:41:07.620 --> 00:41:08.100
announcements

00:41:08.100 --> 00:41:08.740
and

00:41:08.740 --> 00:41:09.400
even

00:41:09.400 --> 00:41:09.640
for

00:41:09.640 --> 00:41:10.020
employees

00:41:10.020 --> 00:41:10.240
we

00:41:10.240 --> 00:41:10.400
don't

00:41:10.400 --> 00:41:10.580
know

00:41:10.580 --> 00:41:10.820
a lot

00:41:10.820 --> 00:41:10.900
of

00:41:10.900 --> 00:41:11.000
the

00:41:11.000 --> 00:41:11.180
stuff

00:41:11.180 --> 00:41:11.360
that's

00:41:11.360 --> 00:41:11.480
going

00:41:11.480 --> 00:41:11.520
to

00:41:11.520 --> 00:41:11.620
be

00:41:11.620 --> 00:41:12.000
announced

00:41:12.000 --> 00:41:12.300
there

00:41:12.300 --> 00:41:12.780
so

00:41:12.780 --> 00:41:13.200
we're

00:41:13.200 --> 00:41:13.360
all

00:41:13.360 --> 00:41:13.620
watching

00:41:13.620 --> 00:41:13.780
the

00:41:13.780 --> 00:41:14.160
keynotes

00:41:14.160 --> 00:41:14.420
the same

00:41:14.420 --> 00:41:14.540
as

00:41:14.540 --> 00:41:14.820
everyone

00:41:14.820 --> 00:41:15.120
else

00:41:15.120 --> 00:41:15.680
and

00:41:15.680 --> 00:41:16.140
seeing

00:41:16.140 --> 00:41:16.300
all

00:41:16.300 --> 00:41:16.400
the

00:41:16.400 --> 00:41:16.740
exciting

00:41:16.740 --> 00:41:17.040
stuff

00:41:17.040 --> 00:41:17.340
coming

00:41:17.340 --> 00:41:17.580
out

00:41:17.580 --> 00:41:18.540
I'm

00:41:18.540 --> 00:41:18.700
still

00:41:18.700 --> 00:41:18.920
waiting

00:41:18.920 --> 00:41:19.080
for

00:41:19.080 --> 00:41:19.180
the

00:41:19.180 --> 00:41:19.360
day

00:41:19.360 --> 00:41:19.680
when

00:41:19.680 --> 00:41:19.920
we

00:41:19.920 --> 00:41:20.060
get

00:41:20.060 --> 00:41:20.160
to

00:41:20.160 --> 00:41:20.280
make

00:41:20.280 --> 00:41:20.440
some

00:41:20.440 --> 00:41:20.580
big

00:41:20.580 --> 00:41:20.860
Python

00:41:20.860 --> 00:41:21.280
announcements

00:41:21.280 --> 00:41:21.520
from

00:41:21.520 --> 00:41:21.620
the

00:41:21.620 --> 00:41:21.860
keynote

00:41:21.860 --> 00:41:22.260
stage

00:41:22.260 --> 00:41:23.000
but

00:41:23.000 --> 00:41:23.440
that's

00:41:23.440 --> 00:41:24.120
probably

00:41:24.120 --> 00:41:24.500
a couple

00:41:24.500 --> 00:41:24.620
of

00:41:24.620 --> 00:41:24.800
years

00:41:24.800 --> 00:41:25.020
away

00:41:25.020 --> 00:41:25.320
still

00:41:25.320 --> 00:41:25.460
at

00:41:25.460 --> 00:41:25.640
this

00:41:25.640 --> 00:41:25.880
point

00:41:25.880 --> 00:41:26.100
but

00:41:26.100 --> 00:41:26.280
I'm

00:41:26.280 --> 00:41:26.840
hoping

00:41:26.840 --> 00:41:27.060
for

00:41:27.060 --> 00:41:27.300
that

00:41:27.300 --> 00:41:27.820
but

00:41:27.820 --> 00:41:27.980
yeah

00:41:27.980 --> 00:41:28.160
there's

00:41:28.160 --> 00:41:28.560
definitely

00:41:28.560 --> 00:41:29.840
so much

00:41:29.840 --> 00:41:30.160
coming

00:41:30.160 --> 00:41:30.400
out

00:41:30.400 --> 00:41:31.000
I love

00:41:31.000 --> 00:41:31.380
the idea

00:41:31.380 --> 00:41:31.520
of

00:41:31.520 --> 00:41:32.060
conversation

00:41:32.060 --> 00:41:32.460
bots

00:41:32.460 --> 00:41:33.140
I

00:41:33.140 --> 00:41:33.720
really

00:41:33.720 --> 00:41:34.020
like

00:41:34.020 --> 00:41:34.180
that

00:41:34.180 --> 00:41:34.500
idea

00:41:34.500 --> 00:41:34.840
of

00:41:34.840 --> 00:41:35.840
making

00:41:35.840 --> 00:41:36.980
so many

00:41:36.980 --> 00:41:37.080
of

00:41:37.080 --> 00:41:37.220
these

00:41:37.220 --> 00:41:37.840
interactions

00:41:37.840 --> 00:41:38.380
more

00:41:38.380 --> 00:41:38.780
natural

00:41:38.780 --> 00:41:39.520
I

00:41:39.520 --> 00:41:39.860
definitely

00:41:39.860 --> 00:41:40.140
feel

00:41:40.140 --> 00:41:40.300
like

00:41:40.300 --> 00:41:40.560
we've

00:41:40.560 --> 00:41:40.980
gone

00:41:40.980 --> 00:41:41.580
from

00:41:41.580 --> 00:41:42.260
where

00:41:42.260 --> 00:41:42.860
10

00:41:42.860 --> 00:41:43.140
years

00:41:43.140 --> 00:41:43.360
ago

00:41:43.360 --> 00:41:43.680
you'd

00:41:43.680 --> 00:41:43.900
call

00:41:43.900 --> 00:41:44.060
up

00:41:44.060 --> 00:41:44.160
a

00:41:44.160 --> 00:41:44.540
hotel

00:41:44.540 --> 00:41:44.880
to

00:41:44.880 --> 00:41:45.180
book

00:41:45.180 --> 00:41:45.700
no

00:41:45.700 --> 00:41:45.880
one

00:41:45.880 --> 00:41:46.100
does

00:41:46.100 --> 00:41:46.280
that

00:41:46.280 --> 00:41:46.600
anymore

00:41:46.600 --> 00:41:47.600
you

00:41:47.600 --> 00:41:47.720
go

00:41:47.720 --> 00:41:47.820
to

00:41:47.820 --> 00:41:47.940
a

00:41:47.940 --> 00:41:49.900
third

00:41:49.900 --> 00:41:50.200
party

00:41:50.200 --> 00:41:50.720
website

00:41:50.720 --> 00:41:50.900
that

00:41:50.900 --> 00:41:51.000
will

00:41:51.000 --> 00:41:51.100
do

00:41:51.100 --> 00:41:51.240
the

00:41:51.240 --> 00:41:51.440
booking

00:41:51.440 --> 00:41:51.740
for

00:41:51.740 --> 00:41:52.000
you

00:41:52.000 --> 00:41:52.700
and

00:41:52.700 --> 00:41:52.940
it's

00:41:52.940 --> 00:41:53.440
gotten

00:41:53.440 --> 00:41:53.760
very

00:41:53.760 --> 00:41:54.480
impersonal

00:41:54.480 --> 00:41:55.360
and

00:41:55.360 --> 00:41:55.460
I

00:41:55.460 --> 00:41:55.600
don't

00:41:55.600 --> 00:41:55.820
actually

00:41:55.820 --> 00:41:56.040
see

00:41:56.040 --> 00:41:56.240
that

00:41:56.240 --> 00:41:57.040
undoing

00:41:57.040 --> 00:41:57.580
completely

00:41:57.580 --> 00:41:58.380
but

00:41:58.380 --> 00:41:58.980
having

00:41:58.980 --> 00:41:59.340
the

00:41:59.340 --> 00:41:59.660
sort

00:41:59.660 --> 00:41:59.760
of

00:41:59.760 --> 00:42:00.460
conversational

00:42:00.460 --> 00:42:00.840
option

00:42:00.840 --> 00:42:01.200
to do

00:42:01.200 --> 00:42:01.400
something

00:42:01.400 --> 00:42:01.660
like

00:42:01.660 --> 00:42:01.960
that

00:42:01.960 --> 00:42:02.640
where

00:42:02.640 --> 00:42:02.900
it

00:42:02.900 --> 00:42:03.060
can

00:42:03.060 --> 00:42:03.340
use

00:42:03.340 --> 00:42:03.920
context

00:42:03.920 --> 00:42:04.400
because

00:42:04.400 --> 00:42:04.680
it

00:42:04.680 --> 00:42:04.940
knows

00:42:04.940 --> 00:42:05.280
about

00:42:05.280 --> 00:42:05.540
you

00:42:05.540 --> 00:42:06.300
having

00:42:06.300 --> 00:42:06.980
I

00:42:06.980 --> 00:42:07.160
guess

00:42:07.160 --> 00:42:07.280
an

00:42:07.280 --> 00:42:07.660
interactive

00:42:07.660 --> 00:42:08.180
dialogue

00:42:08.180 --> 00:42:08.600
to

00:42:08.600 --> 00:42:09.060
achieve

00:42:09.060 --> 00:42:09.240
a

00:42:09.240 --> 00:42:09.540
task

00:42:09.540 --> 00:42:09.740
as

00:42:09.740 --> 00:42:10.120
opposed

00:42:10.120 --> 00:42:10.760
to

00:42:10.760 --> 00:42:10.980
where

00:42:10.980 --> 00:42:11.140
in

00:42:11.140 --> 00:42:11.540
step

00:42:11.540 --> 00:42:11.820
one

00:42:11.820 --> 00:42:12.080
step

00:42:12.080 --> 00:42:12.280
two

00:42:12.280 --> 00:42:12.540
step

00:42:12.540 --> 00:42:12.800
three

00:42:12.800 --> 00:42:13.200
wizard

00:42:13.200 --> 00:42:13.680
kind

00:42:13.680 --> 00:42:13.800
of

00:42:13.800 --> 00:42:14.200
format

00:42:14.200 --> 00:42:14.980
feels

00:42:14.980 --> 00:42:15.420
like

00:42:15.420 --> 00:42:16.000
a

00:42:16.000 --> 00:42:16.220
great

00:42:16.220 --> 00:42:16.480
step

00:42:16.480 --> 00:42:16.680
into

00:42:16.680 --> 00:42:17.040
a

00:42:17.040 --> 00:42:17.240
really

00:42:17.240 --> 00:42:17.640
exciting

00:42:17.640 --> 00:42:18.100
future

00:42:18.100 --> 00:42:18.400
yeah

00:42:18.400 --> 00:42:18.520
it

00:42:18.520 --> 00:42:18.620
is

00:42:18.620 --> 00:42:18.780
pretty

00:42:18.780 --> 00:42:19.020
cool

00:42:19.020 --> 00:42:19.220
and

00:42:19.220 --> 00:42:19.360
just

00:42:19.360 --> 00:42:19.520
to

00:42:19.520 --> 00:42:19.700
kind

00:42:19.700 --> 00:42:20.020
of

00:42:20.020 --> 00:42:20.300
take

00:42:20.300 --> 00:42:20.560
a

00:42:20.560 --> 00:42:20.780
step

00:42:20.780 --> 00:42:21.000
back

00:42:21.000 --> 00:42:21.200
for

00:42:21.200 --> 00:42:21.580
listeners

00:42:21.580 --> 00:42:21.780
who

00:42:21.780 --> 00:42:21.980
maybe

00:42:21.980 --> 00:42:22.620
didn't

00:42:22.620 --> 00:42:23.060
see

00:42:23.060 --> 00:42:23.340
the

00:42:23.340 --> 00:42:24.580
you

00:42:24.580 --> 00:42:24.760
guys

00:42:24.760 --> 00:42:25.020
announced

00:42:25.020 --> 00:42:25.200
this

00:42:25.200 --> 00:42:25.400
thing

00:42:25.400 --> 00:42:25.920
called

00:42:25.920 --> 00:42:27.200
a

00:42:27.200 --> 00:42:27.680
bot

00:42:27.680 --> 00:42:28.500
framework

00:42:28.500 --> 00:42:30.640
which

00:42:30.640 --> 00:42:30.780
I

00:42:30.780 --> 00:42:31.000
then

00:42:31.000 --> 00:42:31.780
announced

00:42:31.780 --> 00:42:32.000
it

00:42:32.000 --> 00:42:32.100
and

00:42:32.100 --> 00:42:32.280
said

00:42:32.280 --> 00:42:32.460
this

00:42:32.460 --> 00:42:32.580
is

00:42:32.580 --> 00:42:32.740
for

00:42:32.740 --> 00:42:32.880
C

00:42:32.880 --> 00:42:33.140
sharp

00:42:33.140 --> 00:42:33.340
and

00:42:33.340 --> 00:42:33.540
no

00:42:33.540 --> 00:42:33.840
JS

00:42:33.840 --> 00:42:34.160
bots

00:42:34.160 --> 00:42:34.320
and

00:42:34.320 --> 00:42:34.440
so

00:42:34.440 --> 00:42:34.580
of

00:42:34.580 --> 00:42:34.700
course

00:42:34.700 --> 00:42:34.860
the

00:42:34.860 --> 00:42:35.040
first

00:42:35.040 --> 00:42:35.160
thing

00:42:35.160 --> 00:42:35.320
I

00:42:35.320 --> 00:42:35.460
did

00:42:35.460 --> 00:42:35.580
is

00:42:35.580 --> 00:42:35.740
went

00:42:35.740 --> 00:42:35.880
off

00:42:35.880 --> 00:42:35.980
to

00:42:35.980 --> 00:42:36.140
write

00:42:36.140 --> 00:42:36.240
a

00:42:36.240 --> 00:42:36.400
button

00:42:36.400 --> 00:42:36.820
Python

00:42:36.820 --> 00:42:37.160
did

00:42:37.160 --> 00:42:37.260
it

00:42:37.260 --> 00:42:37.460
work

00:42:37.460 --> 00:42:37.860
it

00:42:37.860 --> 00:42:38.120
did

00:42:38.120 --> 00:42:38.440
it

00:42:38.440 --> 00:42:38.980
worked

00:42:38.980 --> 00:42:39.320
great

00:42:39.320 --> 00:42:39.700
the

00:42:39.700 --> 00:42:40.100
documentation

00:42:40.100 --> 00:42:40.420
is

00:42:40.420 --> 00:42:40.600
not

00:42:40.600 --> 00:42:40.800
quite

00:42:40.800 --> 00:42:41.140
thorough

00:42:41.140 --> 00:42:41.380
enough

00:42:41.380 --> 00:42:41.520
to

00:42:41.520 --> 00:42:41.680
make

00:42:41.680 --> 00:42:41.900
that

00:42:41.900 --> 00:42:42.300
easy

00:42:42.300 --> 00:42:42.480
for

00:42:42.480 --> 00:42:42.680
people

00:42:42.680 --> 00:42:42.820
to

00:42:42.820 --> 00:42:43.040
do

00:42:43.040 --> 00:42:43.520
because

00:42:43.520 --> 00:42:43.900
the

00:42:43.900 --> 00:42:44.140
first

00:42:44.140 --> 00:42:44.400
step

00:42:44.400 --> 00:42:44.620
is

00:42:44.620 --> 00:42:45.140
install

00:42:45.140 --> 00:42:45.480
this

00:42:45.480 --> 00:42:45.900
library

00:42:45.900 --> 00:42:46.140
or

00:42:46.140 --> 00:42:46.420
install

00:42:46.420 --> 00:42:46.640
this

00:42:46.640 --> 00:42:47.000
library

00:42:47.000 --> 00:42:47.600
and

00:42:47.600 --> 00:42:47.800
until

00:42:47.800 --> 00:42:47.960
we

00:42:47.960 --> 00:42:48.220
have

00:42:48.220 --> 00:42:48.440
a

00:42:48.440 --> 00:42:48.680
Python

00:42:48.680 --> 00:42:48.980
version

00:42:48.980 --> 00:42:49.140
of

00:42:49.140 --> 00:42:49.280
that

00:42:49.280 --> 00:42:49.640
library

00:42:49.640 --> 00:42:49.900
which

00:42:49.900 --> 00:42:50.040
is

00:42:50.040 --> 00:42:50.240
something

00:42:50.240 --> 00:42:50.380
that

00:42:50.380 --> 00:42:50.560
I'm

00:42:50.560 --> 00:42:50.840
really

00:42:50.840 --> 00:42:51.080
keen

00:42:51.080 --> 00:42:51.200
to

00:42:51.200 --> 00:42:51.340
do

00:42:51.340 --> 00:42:51.580
now

00:42:51.580 --> 00:42:52.220
it's

00:42:52.220 --> 00:42:52.480
not

00:42:52.480 --> 00:42:53.420
quite

00:42:53.420 --> 00:42:53.860
trivial

00:42:53.860 --> 00:42:54.080
to

00:42:54.080 --> 00:42:54.220
get

00:42:54.220 --> 00:42:54.320
it

00:42:54.320 --> 00:42:54.440
up

00:42:54.440 --> 00:42:54.580
and

00:42:54.580 --> 00:42:54.820
going

00:42:54.820 --> 00:42:55.440
but

00:42:55.440 --> 00:42:55.820
even

00:42:55.820 --> 00:42:56.080
without

00:42:56.080 --> 00:42:56.400
that

00:42:56.400 --> 00:42:56.540
I

00:42:56.540 --> 00:42:56.820
managed

00:42:56.820 --> 00:42:57.000
to

00:42:57.000 --> 00:42:57.220
get

00:42:57.220 --> 00:42:57.780
a

00:42:57.780 --> 00:42:57.940
bot

00:42:57.940 --> 00:42:58.300
going

00:42:58.300 --> 00:42:58.660
that

00:42:58.660 --> 00:42:59.140
you

00:42:59.140 --> 00:42:59.300
can

00:42:59.300 --> 00:42:59.500
chat

00:42:59.500 --> 00:42:59.680
with

00:42:59.680 --> 00:42:59.820
through

00:42:59.820 --> 00:42:59.960
the

00:42:59.960 --> 00:43:00.300
framework

00:43:00.300 --> 00:43:00.600
and

00:43:00.600 --> 00:43:00.780
so

00:43:00.780 --> 00:43:01.040
then

00:43:01.040 --> 00:43:01.660
the

00:43:01.660 --> 00:43:01.860
nice

00:43:01.860 --> 00:43:01.980
thing

00:43:01.980 --> 00:43:02.200
about

00:43:02.200 --> 00:43:02.640
fitting

00:43:02.640 --> 00:43:02.840
into

00:43:02.840 --> 00:43:02.960
the

00:43:02.960 --> 00:43:03.260
framework

00:43:03.260 --> 00:43:03.680
is

00:43:03.680 --> 00:43:03.780
you

00:43:03.780 --> 00:43:04.080
get

00:43:04.080 --> 00:43:04.200
all

00:43:04.200 --> 00:43:04.300
the

00:43:04.300 --> 00:43:04.660
connectors

00:43:04.660 --> 00:43:05.180
so

00:43:05.180 --> 00:43:05.480
it's

00:43:05.480 --> 00:43:06.300
instructions

00:43:06.300 --> 00:43:06.480
are

00:43:06.480 --> 00:43:06.820
provided

00:43:06.820 --> 00:43:07.060
for

00:43:07.060 --> 00:43:07.380
connecting

00:43:07.380 --> 00:43:07.600
that

00:43:07.600 --> 00:43:07.800
bot

00:43:07.800 --> 00:43:07.980
up

00:43:07.980 --> 00:43:08.280
through

00:43:08.280 --> 00:43:09.300
telegram

00:43:09.300 --> 00:43:09.660
through

00:43:09.660 --> 00:43:10.240
twitter

00:43:10.240 --> 00:43:10.540
through

00:43:10.540 --> 00:43:10.960
twilio

00:43:10.960 --> 00:43:11.580
through

00:43:11.580 --> 00:43:11.960
so

00:43:11.960 --> 00:43:12.160
many

00:43:12.160 --> 00:43:12.280
of

00:43:12.280 --> 00:43:12.420
these

00:43:12.420 --> 00:43:12.820
services

00:43:12.820 --> 00:43:13.460
that

00:43:13.460 --> 00:43:14.240
if

00:43:14.240 --> 00:43:14.340
you

00:43:14.340 --> 00:43:14.480
want

00:43:14.480 --> 00:43:14.560
to

00:43:14.560 --> 00:43:14.840
interact

00:43:14.840 --> 00:43:15.000
with

00:43:15.000 --> 00:43:15.100
it

00:43:15.100 --> 00:43:15.260
by

00:43:15.260 --> 00:43:15.680
email

00:43:15.680 --> 00:43:15.980
or

00:43:15.980 --> 00:43:16.220
by

00:43:16.220 --> 00:43:17.040
phone

00:43:17.040 --> 00:43:17.420
call

00:43:17.420 --> 00:43:17.580
or

00:43:17.580 --> 00:43:18.080
sms

00:43:18.080 --> 00:43:18.600
you

00:43:18.600 --> 00:43:18.720
can

00:43:18.720 --> 00:43:18.880
just

00:43:18.880 --> 00:43:19.060
do

00:43:19.060 --> 00:43:19.380
that

00:43:19.380 --> 00:43:19.980
and

00:43:19.980 --> 00:43:20.100
so

00:43:20.100 --> 00:43:20.300
that's

00:43:20.300 --> 00:43:20.420
a

00:43:20.420 --> 00:43:20.620
really

00:43:20.620 --> 00:43:20.820
cool

00:43:20.820 --> 00:43:20.960
thing

00:43:20.960 --> 00:43:21.120
about

00:43:21.120 --> 00:43:21.260
that

00:43:21.260 --> 00:43:21.620
framework

00:43:21.620 --> 00:43:21.920
is

00:43:21.920 --> 00:43:22.660
you

00:43:22.660 --> 00:43:22.900
write

00:43:22.900 --> 00:43:23.020
a

00:43:23.020 --> 00:43:23.160
bot

00:43:23.160 --> 00:43:23.560
once

00:43:23.560 --> 00:43:23.760
and

00:43:23.760 --> 00:43:23.900
then

00:43:23.900 --> 00:43:24.040
you

00:43:24.040 --> 00:43:24.340
can

00:43:24.340 --> 00:43:25.000
reference

00:43:25.000 --> 00:43:25.240
it

00:43:25.240 --> 00:43:25.500
from

00:43:25.500 --> 00:43:25.740
all

00:43:25.740 --> 00:43:25.840
of

00:43:25.840 --> 00:43:26.000
these

00:43:26.000 --> 00:43:26.400
services

00:43:26.400 --> 00:43:26.840
that

00:43:26.840 --> 00:43:27.800
support

00:43:27.800 --> 00:43:28.140
bots

00:43:28.140 --> 00:43:28.300
in

00:43:28.300 --> 00:43:28.520
some

00:43:28.520 --> 00:43:28.820
form

00:43:28.820 --> 00:43:29.540
yeah

00:43:29.540 --> 00:43:29.760
it

00:43:29.760 --> 00:43:30.000
looks

00:43:30.000 --> 00:43:30.180
really

00:43:30.180 --> 00:43:30.400
cool

00:43:30.400 --> 00:43:30.560
and

00:43:30.560 --> 00:43:30.780
for

00:43:30.780 --> 00:43:31.140
the

00:43:31.140 --> 00:43:31.440
data

00:43:31.440 --> 00:43:31.860
scientists

00:43:31.860 --> 00:43:32.280
out

00:43:32.280 --> 00:43:32.520
there

00:43:32.520 --> 00:43:33.660
listening

00:43:33.660 --> 00:43:34.460
the

00:43:34.460 --> 00:43:34.780
back

00:43:34.780 --> 00:43:35.020
end

00:43:35.020 --> 00:43:35.300
stuff

00:43:35.300 --> 00:43:35.460
you

00:43:35.460 --> 00:43:35.600
guys

00:43:35.600 --> 00:43:35.680
are

00:43:35.680 --> 00:43:35.860
doing

00:43:35.860 --> 00:43:36.100
with

00:43:36.100 --> 00:43:36.560
machine

00:43:36.560 --> 00:43:37.040
learning

00:43:37.040 --> 00:43:37.900
and

00:43:37.900 --> 00:43:38.420
natural

00:43:38.420 --> 00:43:38.840
language

00:43:38.840 --> 00:43:39.320
processing

00:43:39.320 --> 00:43:39.740
there's

00:43:39.740 --> 00:43:40.100
a lot

00:43:40.100 --> 00:43:40.220
of

00:43:40.220 --> 00:43:40.500
really

00:43:40.500 --> 00:43:41.180
cool

00:43:41.180 --> 00:43:41.880
semantic

00:43:41.880 --> 00:43:42.680
understanding

00:43:42.680 --> 00:43:42.900
of

00:43:42.900 --> 00:43:43.120
written

00:43:43.120 --> 00:43:43.580
text

00:43:43.580 --> 00:43:43.780
and

00:43:43.780 --> 00:43:44.080
stuff

00:43:44.080 --> 00:43:44.280
so

00:43:44.280 --> 00:43:44.780
I

00:43:44.780 --> 00:43:45.100
think

00:43:45.100 --> 00:43:45.240
that

00:43:45.240 --> 00:43:45.360
was

00:43:45.360 --> 00:43:45.520
one

00:43:45.520 --> 00:43:45.600
of

00:43:45.600 --> 00:43:45.820
the

00:43:45.820 --> 00:43:46.200
really

00:43:46.200 --> 00:43:46.660
interesting

00:43:46.660 --> 00:43:47.040
ones

00:43:47.040 --> 00:43:47.260
you

00:43:47.260 --> 00:43:47.440
guys

00:43:47.440 --> 00:43:47.580
did

00:43:47.580 --> 00:43:47.700
a

00:43:47.700 --> 00:43:47.860
bunch

00:43:47.860 --> 00:43:47.980
of

00:43:47.980 --> 00:43:48.200
open

00:43:48.200 --> 00:43:48.460
source

00:43:48.460 --> 00:43:48.860
announcements

00:43:48.860 --> 00:43:49.280
so

00:43:49.280 --> 00:43:49.500
we

00:43:49.500 --> 00:43:49.700
talked

00:43:49.700 --> 00:43:49.940
about

00:43:49.940 --> 00:43:50.340
Microsoft

00:43:50.340 --> 00:43:50.800
becoming

00:43:50.800 --> 00:43:51.040
more

00:43:51.040 --> 00:43:51.260
open

00:43:51.260 --> 00:43:51.520
source

00:43:51.520 --> 00:43:51.960
this

00:43:51.960 --> 00:43:52.140
was

00:43:52.140 --> 00:43:52.700
absolutely

00:43:52.700 --> 00:43:53.080
evident

00:43:53.080 --> 00:43:53.300
there

00:43:53.300 --> 00:43:53.460
that

00:43:53.460 --> 00:43:53.600
was

00:43:53.600 --> 00:43:53.820
super

00:43:53.820 --> 00:43:54.020
cool

00:43:54.020 --> 00:43:54.140
to

00:43:54.140 --> 00:43:54.320
see

00:43:54.320 --> 00:43:55.120
but

00:43:55.120 --> 00:43:55.520
one

00:43:55.520 --> 00:43:55.700
that

00:43:55.700 --> 00:43:56.160
surprised

00:43:56.160 --> 00:43:56.320
me

00:43:56.320 --> 00:43:56.420
I

00:43:56.420 --> 00:43:56.540
did

00:43:56.540 --> 00:43:56.680
not

00:43:56.680 --> 00:43:56.840
see

00:43:56.840 --> 00:43:57.060
coming

00:43:57.060 --> 00:43:57.220
at

00:43:57.220 --> 00:43:57.560
all

00:43:57.560 --> 00:43:58.100
was

00:43:58.100 --> 00:43:58.800
Ubuntu

00:43:58.800 --> 00:43:59.100
on

00:43:59.100 --> 00:43:59.500
Windows

00:43:59.500 --> 00:43:59.840
tell me

00:43:59.840 --> 00:44:00.140
what that

00:44:00.140 --> 00:44:00.740
is

00:44:00.740 --> 00:44:01.120
I

00:44:01.120 --> 00:44:01.300
don't

00:44:01.300 --> 00:44:01.500
think

00:44:01.500 --> 00:44:02.060
anyone

00:44:02.060 --> 00:44:02.360
saw

00:44:02.360 --> 00:44:02.560
that

00:44:02.560 --> 00:44:02.720
one

00:44:02.720 --> 00:44:03.040
coming

00:44:03.040 --> 00:44:03.500
I

00:44:03.500 --> 00:44:03.780
wouldn't

00:44:03.780 --> 00:44:03.880
have

00:44:03.880 --> 00:44:03.980
been

00:44:03.980 --> 00:44:04.380
surprised

00:44:04.380 --> 00:44:04.620
if

00:44:04.620 --> 00:44:05.260
the

00:44:05.260 --> 00:44:05.560
CEO

00:44:05.560 --> 00:44:05.960
whenever

00:44:05.960 --> 00:44:06.160
they

00:44:06.160 --> 00:44:06.320
went

00:44:06.320 --> 00:44:06.460
and

00:44:06.460 --> 00:44:06.620
told

00:44:06.620 --> 00:44:06.940
Satya

00:44:06.940 --> 00:44:07.120
hey

00:44:07.120 --> 00:44:07.320
we're

00:44:07.320 --> 00:44:07.420
going

00:44:07.420 --> 00:44:07.500
to

00:44:07.500 --> 00:44:07.780
announce

00:44:07.780 --> 00:44:07.940
this

00:44:07.940 --> 00:44:08.080
at

00:44:08.080 --> 00:44:08.260
build

00:44:08.260 --> 00:44:08.420
if

00:44:08.420 --> 00:44:08.580
he

00:44:08.580 --> 00:44:08.840
wasn't

00:44:08.840 --> 00:44:09.200
completely

00:44:09.200 --> 00:44:09.480
shocked

00:44:09.480 --> 00:44:09.640
out

00:44:09.640 --> 00:44:09.720
of

00:44:09.720 --> 00:44:09.860
his

00:44:09.860 --> 00:44:10.060
seat

00:44:10.060 --> 00:44:10.840
no

00:44:10.840 --> 00:44:11.060
it

00:44:11.060 --> 00:44:11.340
it

00:44:11.340 --> 00:44:11.740
really

00:44:11.740 --> 00:44:12.360
cool

00:44:12.360 --> 00:44:12.880
it

00:44:12.880 --> 00:44:13.260
is

00:44:13.260 --> 00:44:13.800
like

00:44:13.800 --> 00:44:14.100
so

00:44:14.100 --> 00:44:14.560
I've

00:44:14.560 --> 00:44:14.660
had

00:44:14.660 --> 00:44:14.760
a

00:44:14.760 --> 00:44:14.900
chat

00:44:14.900 --> 00:44:15.040
with

00:44:15.040 --> 00:44:15.220
those

00:44:15.220 --> 00:44:15.560
guys

00:44:15.560 --> 00:44:16.120
and

00:44:16.120 --> 00:44:16.920
it

00:44:16.920 --> 00:44:17.440
really

00:44:17.440 --> 00:44:17.760
is

00:44:17.760 --> 00:44:18.420
such

00:44:18.420 --> 00:44:18.640
a

00:44:18.640 --> 00:44:19.160
nice

00:44:19.160 --> 00:44:19.700
thin

00:44:19.700 --> 00:44:20.020
layer

00:44:20.020 --> 00:44:20.240
on

00:44:20.240 --> 00:44:20.500
top

00:44:20.500 --> 00:44:20.940
of

00:44:20.940 --> 00:44:21.480
the

00:44:21.480 --> 00:44:21.740
Windows

00:44:21.740 --> 00:44:22.100
APIs

00:44:22.100 --> 00:44:22.300
that

00:44:22.300 --> 00:44:22.460
you'd

00:44:22.460 --> 00:44:22.640
never

00:44:22.640 --> 00:44:22.920
see

00:44:22.920 --> 00:44:23.100
so

00:44:23.100 --> 00:44:23.240
it's

00:44:23.240 --> 00:44:23.380
not

00:44:23.380 --> 00:44:23.580
like

00:44:23.580 --> 00:44:23.980
Sigwin

00:44:23.980 --> 00:44:24.840
where

00:44:24.840 --> 00:44:25.320
you

00:44:25.320 --> 00:44:25.480
have

00:44:25.480 --> 00:44:25.600
a

00:44:25.600 --> 00:44:25.840
different

00:44:25.840 --> 00:44:26.040
set

00:44:26.040 --> 00:44:26.160
of

00:44:26.160 --> 00:44:26.420
libraries

00:44:26.420 --> 00:44:26.620
to

00:44:26.620 --> 00:44:26.800
build

00:44:26.800 --> 00:44:27.120
against

00:44:27.120 --> 00:44:27.640
it's

00:44:27.640 --> 00:44:27.760
a

00:44:27.760 --> 00:44:28.000
kernel

00:44:28.000 --> 00:44:28.300
shim

00:44:28.300 --> 00:44:28.680
so

00:44:28.680 --> 00:44:29.040
everything

00:44:29.040 --> 00:44:29.280
is

00:44:29.280 --> 00:44:29.580
already

00:44:29.580 --> 00:44:30.020
built

00:44:30.020 --> 00:44:30.520
for

00:44:30.520 --> 00:44:31.260
Ubuntu

00:44:31.260 --> 00:44:32.180
and

00:44:32.180 --> 00:44:32.380
it

00:44:32.380 --> 00:44:32.540
is

00:44:32.540 --> 00:44:32.880
literally

00:44:32.880 --> 00:44:33.100
we

00:44:33.100 --> 00:44:33.240
just

00:44:33.240 --> 00:44:33.440
copy

00:44:33.440 --> 00:44:33.580
the

00:44:33.580 --> 00:44:33.940
binaries

00:44:33.940 --> 00:44:34.220
over

00:44:34.220 --> 00:44:34.720
and

00:44:34.720 --> 00:44:34.940
every

00:44:34.940 --> 00:44:35.180
time

00:44:35.180 --> 00:44:35.360
they

00:44:35.360 --> 00:44:35.740
go

00:44:35.740 --> 00:44:35.880
to

00:44:35.880 --> 00:44:36.060
call

00:44:36.060 --> 00:44:36.240
into

00:44:36.240 --> 00:44:36.380
the

00:44:36.380 --> 00:44:36.620
kernel

00:44:36.620 --> 00:44:37.240
that

00:44:37.240 --> 00:44:37.500
gets

00:44:37.500 --> 00:44:38.160
intercepted

00:44:38.160 --> 00:44:38.360
and

00:44:38.360 --> 00:44:38.760
rewritten

00:44:38.760 --> 00:44:38.980
into

00:44:38.980 --> 00:44:39.120
the

00:44:39.120 --> 00:44:39.420
Windows

00:44:39.420 --> 00:44:40.540
kernel

00:44:40.540 --> 00:44:40.900
calls

00:44:40.900 --> 00:44:41.460
but

00:44:41.460 --> 00:44:41.640
it's

00:44:41.640 --> 00:44:41.960
completely

00:44:41.960 --> 00:44:42.540
transparent

00:44:42.540 --> 00:44:43.040
you don't

00:44:43.040 --> 00:44:43.300
have to

00:44:43.300 --> 00:44:43.620
rebuild

00:44:43.620 --> 00:44:44.000
anything

00:44:44.000 --> 00:44:44.320
you don't

00:44:44.320 --> 00:44:44.560
have to

00:44:44.560 --> 00:44:44.800
change

00:44:44.800 --> 00:44:45.280
references

00:44:45.280 --> 00:44:46.480
and

00:44:46.480 --> 00:44:46.820
so

00:44:46.820 --> 00:44:47.700
when

00:44:47.700 --> 00:44:47.860
you

00:44:47.860 --> 00:44:48.180
get

00:44:48.180 --> 00:44:48.680
bash

00:44:48.680 --> 00:44:48.960
and

00:44:48.960 --> 00:44:49.060
you

00:44:49.060 --> 00:44:49.280
just

00:44:49.280 --> 00:44:49.600
get

00:44:49.600 --> 00:44:49.820
into

00:44:49.820 --> 00:44:49.960
and

00:44:49.960 --> 00:44:50.200
start

00:44:50.200 --> 00:44:50.480
calling

00:44:50.480 --> 00:44:50.780
stuff

00:44:50.780 --> 00:44:51.080
it's

00:44:51.080 --> 00:44:51.400
all

00:44:51.400 --> 00:44:51.980
the

00:44:51.980 --> 00:44:52.280
exact

00:44:52.280 --> 00:44:52.600
same

00:44:52.600 --> 00:44:52.880
elf

00:44:52.880 --> 00:44:53.300
binaries

00:44:53.300 --> 00:44:53.520
as

00:44:53.520 --> 00:44:53.680
you'd

00:44:53.680 --> 00:44:53.900
have

00:44:53.900 --> 00:44:54.280
on

00:44:54.280 --> 00:44:55.100
a

00:44:55.100 --> 00:44:55.420
machine

00:44:55.420 --> 00:44:55.720
that

00:44:55.720 --> 00:44:56.220
has

00:44:56.220 --> 00:44:57.320
Linux

00:44:57.320 --> 00:44:57.540
all

00:44:57.540 --> 00:44:57.640
the

00:44:57.640 --> 00:44:57.780
way

00:44:57.780 --> 00:44:58.020
through

00:44:58.020 --> 00:44:58.300
instead

00:44:58.300 --> 00:44:58.480
of

00:44:58.480 --> 00:44:58.640
being

00:44:58.640 --> 00:44:58.840
this

00:44:58.840 --> 00:44:59.060
layer

00:44:59.060 --> 00:44:59.220
on

00:44:59.220 --> 00:44:59.380
top

00:44:59.380 --> 00:44:59.520
of

00:44:59.520 --> 00:44:59.820
Windows

00:44:59.820 --> 00:45:00.320
and

00:45:00.320 --> 00:45:00.420
the

00:45:00.420 --> 00:45:00.540
thing

00:45:00.540 --> 00:45:00.680
that

00:45:00.680 --> 00:45:00.960
really

00:45:00.960 --> 00:45:01.200
blew

00:45:01.200 --> 00:45:01.400
me

00:45:01.400 --> 00:45:01.600
away

00:45:01.600 --> 00:45:01.860
is

00:45:01.860 --> 00:45:02.300
I

00:45:02.300 --> 00:45:02.500
didn't

00:45:02.500 --> 00:45:02.740
test

00:45:02.740 --> 00:45:02.940
this

00:45:02.940 --> 00:45:03.160
but

00:45:03.160 --> 00:45:03.380
I

00:45:03.380 --> 00:45:03.500
saw

00:45:03.500 --> 00:45:03.640
the

00:45:03.640 --> 00:45:03.820
blog

00:45:03.820 --> 00:45:04.060
post

00:45:04.060 --> 00:45:04.240
the

00:45:04.240 --> 00:45:04.700
performance

00:45:04.700 --> 00:45:04.940
is

00:45:04.940 --> 00:45:05.480
apparently

00:45:05.480 --> 00:45:05.840
right

00:45:05.840 --> 00:45:06.040
up

00:45:06.040 --> 00:45:06.220
there

00:45:06.220 --> 00:45:06.540
with

00:45:06.540 --> 00:45:07.140
a

00:45:07.140 --> 00:45:07.460
native

00:45:07.460 --> 00:45:07.740
Linux

00:45:07.740 --> 00:45:08.080
machine

00:45:08.080 --> 00:45:08.280
which

00:45:08.280 --> 00:45:08.400
is

00:45:08.400 --> 00:45:08.880
incredible

00:45:08.880 --> 00:45:09.180
that's

00:45:09.180 --> 00:45:09.360
really

00:45:09.360 --> 00:45:09.640
awesome

00:45:09.640 --> 00:45:09.880
so

00:45:09.880 --> 00:45:10.160
people

00:45:10.160 --> 00:45:10.400
who

00:45:10.400 --> 00:45:11.520
love

00:45:11.520 --> 00:45:11.740
their

00:45:11.740 --> 00:45:12.060
Linux

00:45:12.060 --> 00:45:12.440
tools

00:45:12.440 --> 00:45:13.260
which

00:45:13.260 --> 00:45:13.560
a lot

00:45:13.560 --> 00:45:13.660
of

00:45:13.660 --> 00:45:13.920
Python

00:45:13.920 --> 00:45:14.340
developers

00:45:14.340 --> 00:45:14.680
do

00:45:14.680 --> 00:45:15.760
this

00:45:15.760 --> 00:45:15.940
is

00:45:15.940 --> 00:45:16.140
coming

00:45:16.140 --> 00:45:16.280
to

00:45:16.280 --> 00:45:16.560
Windows

00:45:16.560 --> 00:45:17.100
basically

00:45:17.100 --> 00:45:17.580
in

00:45:17.580 --> 00:45:17.900
a

00:45:17.900 --> 00:45:18.220
native

00:45:18.220 --> 00:45:18.640
sense

00:45:18.640 --> 00:45:18.840
right

00:45:18.840 --> 00:45:19.160
what's

00:45:19.160 --> 00:45:19.280
the

00:45:19.280 --> 00:45:19.600
timeline

00:45:19.600 --> 00:45:19.800
did

00:45:19.800 --> 00:45:19.920
you

00:45:19.920 --> 00:45:20.360
catch

00:45:20.360 --> 00:45:20.540
that

00:45:20.540 --> 00:45:21.080
no

00:45:21.080 --> 00:45:21.200
I

00:45:21.200 --> 00:45:21.360
didn't

00:45:21.360 --> 00:45:21.560
catch

00:45:21.560 --> 00:45:21.700
the

00:45:21.700 --> 00:45:22.000
timeline

00:45:22.000 --> 00:45:22.440
but

00:45:22.440 --> 00:45:22.580
I

00:45:22.580 --> 00:45:23.660
understand

00:45:23.660 --> 00:45:24.000
it's

00:45:24.000 --> 00:45:24.080
in

00:45:24.080 --> 00:45:24.160
the

00:45:24.160 --> 00:45:24.360
current

00:45:24.360 --> 00:45:24.680
preview

00:45:24.680 --> 00:45:25.100
releases

00:45:25.100 --> 00:45:25.420
so

00:45:25.420 --> 00:45:25.600
if

00:45:25.600 --> 00:45:25.780
you're

00:45:25.780 --> 00:45:26.060
part

00:45:26.060 --> 00:45:26.180
of

00:45:26.180 --> 00:45:26.360
the

00:45:26.360 --> 00:45:26.620
Windows

00:45:26.620 --> 00:45:26.980
Insider

00:45:26.980 --> 00:45:27.400
program

00:45:27.400 --> 00:45:28.280
then

00:45:28.280 --> 00:45:28.720
you

00:45:28.720 --> 00:45:28.940
should

00:45:28.940 --> 00:45:30.120
either

00:45:30.120 --> 00:45:30.500
have

00:45:30.500 --> 00:45:30.680
a

00:45:30.680 --> 00:45:30.860
build

00:45:30.860 --> 00:45:31.080
with

00:45:31.080 --> 00:45:31.180
it

00:45:31.180 --> 00:45:31.280
or

00:45:31.280 --> 00:45:31.460
you'll

00:45:31.460 --> 00:45:31.660
soon

00:45:31.660 --> 00:45:31.800
be

00:45:31.800 --> 00:45:31.980
getting

00:45:31.980 --> 00:45:32.160
a

00:45:32.160 --> 00:45:32.380
build

00:45:32.380 --> 00:45:32.920
that

00:45:32.920 --> 00:45:33.080
will

00:45:33.080 --> 00:45:33.220
let

00:45:33.220 --> 00:45:33.320
you

00:45:33.320 --> 00:45:33.520
try

00:45:33.520 --> 00:45:33.680
it

00:45:33.680 --> 00:45:33.860
out

00:45:33.860 --> 00:45:34.040
I

00:45:34.040 --> 00:45:34.040
I

00:45:34.040 --> 00:45:34.180
got

00:45:34.180 --> 00:45:34.320
the

00:45:34.320 --> 00:45:34.500
since

00:45:34.500 --> 00:45:34.640
it

00:45:34.640 --> 00:45:34.740
was

00:45:34.740 --> 00:45:34.980
coming

00:45:34.980 --> 00:45:35.260
with

00:45:35.260 --> 00:45:36.260
the

00:45:36.260 --> 00:45:36.640
anniversary

00:45:36.640 --> 00:45:37.240
update

00:45:37.240 --> 00:45:37.480
of

00:45:37.480 --> 00:45:37.800
Windows

00:45:37.800 --> 00:45:38.180
10

00:45:38.180 --> 00:45:38.660
I

00:45:38.660 --> 00:45:39.080
expect

00:45:39.080 --> 00:45:39.340
that's

00:45:39.340 --> 00:45:39.460
when

00:45:39.460 --> 00:45:39.680
it'll

00:45:39.680 --> 00:45:40.140
come

00:45:40.140 --> 00:45:40.340
out

00:45:40.340 --> 00:45:40.560
but

00:45:40.560 --> 00:45:40.960
certainly

00:45:40.960 --> 00:45:41.200
there

00:45:41.200 --> 00:45:41.400
are

00:45:41.400 --> 00:45:41.860
early

00:45:41.860 --> 00:45:42.200
builds

00:45:42.200 --> 00:45:42.820
available

00:45:42.820 --> 00:45:43.520
I've

00:45:43.520 --> 00:45:43.720
used

00:45:43.720 --> 00:45:43.920
one

00:45:43.920 --> 00:45:44.080
but

00:45:44.080 --> 00:45:44.180
I

00:45:44.180 --> 00:45:44.300
get

00:45:44.300 --> 00:45:44.520
access

00:45:44.520 --> 00:45:44.700
to

00:45:44.700 --> 00:45:44.920
the

00:45:44.920 --> 00:45:45.300
daily

00:45:45.300 --> 00:45:45.660
builds

00:45:45.660 --> 00:45:45.960
but

00:45:45.960 --> 00:45:46.100
the

00:45:46.100 --> 00:45:46.380
insider

00:45:46.380 --> 00:45:46.620
builds

00:45:46.620 --> 00:45:46.820
are not

00:45:46.820 --> 00:45:47.120
that far

00:45:47.120 --> 00:45:47.440
behind

00:45:47.440 --> 00:45:47.680
they're

00:45:47.680 --> 00:45:48.080
typically

00:45:48.080 --> 00:45:48.460
only

00:45:48.460 --> 00:45:49.840
three to

00:45:49.840 --> 00:45:49.980
four

00:45:49.980 --> 00:45:50.220
days

00:45:50.220 --> 00:45:51.180
behind

00:45:51.180 --> 00:45:51.620
what

00:45:51.620 --> 00:45:51.740
we

00:45:51.740 --> 00:45:51.900
have

00:45:51.900 --> 00:45:52.140
access

00:45:52.140 --> 00:45:52.320
to

00:45:52.320 --> 00:45:52.460
as

00:45:52.460 --> 00:45:52.800
employees

00:45:52.800 --> 00:45:53.060
so

00:45:53.060 --> 00:45:53.200
there

00:45:53.200 --> 00:45:53.340
should

00:45:53.340 --> 00:45:53.460
be

00:45:53.460 --> 00:45:53.600
one

00:45:53.600 --> 00:45:53.760
out

00:45:53.760 --> 00:45:53.960
there

00:45:53.960 --> 00:45:54.080
at

00:45:54.080 --> 00:45:54.240
this

00:45:54.240 --> 00:45:54.460
point

00:45:54.460 --> 00:45:54.780
already

00:45:54.780 --> 00:45:55.380
though

00:45:55.380 --> 00:45:55.480
I

00:45:55.480 --> 00:45:55.700
haven't

00:45:55.700 --> 00:45:55.900
checked

00:45:55.900 --> 00:45:56.040
so

00:45:56.040 --> 00:45:56.120
I

00:45:56.120 --> 00:45:56.240
could

00:45:56.240 --> 00:45:56.340
be

00:45:56.340 --> 00:45:56.540
wrong

00:45:56.540 --> 00:45:57.040
but

00:45:57.040 --> 00:45:57.500
it's

00:45:57.500 --> 00:45:57.940
very

00:45:57.940 --> 00:45:58.240
cool

00:45:58.240 --> 00:45:58.460
yeah

00:45:58.460 --> 00:45:58.560
I'll

00:45:58.560 --> 00:45:58.760
be sure

00:45:58.760 --> 00:45:59.000
to link

00:45:59.000 --> 00:45:59.300
to that

00:45:59.300 --> 00:45:59.540
in the

00:45:59.540 --> 00:46:00.000
show notes

00:46:00.000 --> 00:46:00.620
as well

00:46:00.620 --> 00:46:01.420
all right

00:46:01.420 --> 00:46:01.740
Steve we

00:46:01.740 --> 00:46:02.000
just have

00:46:02.000 --> 00:46:02.520
a few

00:46:02.520 --> 00:46:02.900
more

00:46:02.900 --> 00:46:03.460
minutes

00:46:03.460 --> 00:46:03.680
so

00:46:03.680 --> 00:46:03.940
time

00:46:03.940 --> 00:46:04.180
for

00:46:04.180 --> 00:46:04.720
a couple

00:46:04.720 --> 00:46:04.920
of

00:46:04.920 --> 00:46:05.340
closing

00:46:05.340 --> 00:46:05.880
questions

00:46:05.880 --> 00:46:06.620
this

00:46:06.620 --> 00:46:06.840
one

00:46:06.840 --> 00:46:07.020
is

00:46:07.020 --> 00:46:07.160
going

00:46:07.160 --> 00:46:07.300
to be

00:46:07.300 --> 00:46:07.500
a

00:46:07.500 --> 00:46:08.020
softball

00:46:08.020 --> 00:46:08.500
for you

00:46:08.500 --> 00:46:10.400
what's

00:46:10.400 --> 00:46:11.260
your favorite

00:46:11.260 --> 00:46:11.640
Python

00:46:11.640 --> 00:46:12.020
editor

00:46:12.020 --> 00:46:14.280
Visual Studio

00:46:14.280 --> 00:46:14.580
that's

00:46:14.580 --> 00:46:14.840
awesome

00:46:14.840 --> 00:46:15.360
isn't that

00:46:15.360 --> 00:46:15.660
the answer

00:46:15.660 --> 00:46:16.280
everyone gives

00:46:16.280 --> 00:46:17.000
yeah

00:46:17.000 --> 00:46:17.360
that's

00:46:17.360 --> 00:46:18.660
well I

00:46:18.660 --> 00:46:18.760
am

00:46:18.760 --> 00:46:19.060
trying to

00:46:19.060 --> 00:46:19.220
spread

00:46:19.220 --> 00:46:19.580
the word

00:46:19.580 --> 00:46:19.900
I

00:46:19.900 --> 00:46:20.680
think

00:46:20.680 --> 00:46:20.880
it's

00:46:20.880 --> 00:46:21.080
great

00:46:21.080 --> 00:46:21.180
what

00:46:21.180 --> 00:46:21.380
you guys

00:46:21.380 --> 00:46:21.620
are doing

00:46:21.620 --> 00:46:21.820
there

00:46:21.820 --> 00:46:22.180
so

00:46:22.180 --> 00:46:22.940
congratulations

00:46:22.940 --> 00:46:23.540
on that

00:46:23.540 --> 00:46:24.120
and

00:46:24.120 --> 00:46:24.680
I always

00:46:24.680 --> 00:46:25.080
ask

00:46:25.080 --> 00:46:25.560
you know

00:46:25.560 --> 00:46:25.840
there's

00:46:25.840 --> 00:46:26.360
so many

00:46:26.360 --> 00:46:26.780
packages

00:46:26.780 --> 00:46:27.260
on the

00:46:27.260 --> 00:46:27.500
Python

00:46:27.500 --> 00:46:27.760
package

00:46:27.760 --> 00:46:28.120
index

00:46:28.120 --> 00:46:28.680
on PyPI

00:46:28.680 --> 00:46:29.600
at least

00:46:29.600 --> 00:46:30.720
75,000

00:46:30.720 --> 00:46:31.120
last time

00:46:31.120 --> 00:46:31.580
I checked

00:46:31.580 --> 00:46:31.920
the number

00:46:31.920 --> 00:46:32.860
there's

00:46:32.860 --> 00:46:33.440
got to be

00:46:33.440 --> 00:46:33.880
a bunch

00:46:33.880 --> 00:46:34.380
that you use

00:46:34.380 --> 00:46:34.740
that maybe

00:46:34.740 --> 00:46:35.260
people don't

00:46:35.260 --> 00:46:35.600
know about

00:46:35.600 --> 00:46:35.840
you like

00:46:35.840 --> 00:46:36.180
you should

00:46:36.180 --> 00:46:36.540
check this

00:46:36.540 --> 00:46:36.680
out

00:46:36.680 --> 00:46:36.840
it's

00:46:36.840 --> 00:46:37.100
awesome

00:46:37.100 --> 00:46:37.840
what

00:46:37.840 --> 00:46:38.140
one's

00:46:38.140 --> 00:46:38.320
yours

00:46:38.320 --> 00:46:38.560
that

00:46:38.560 --> 00:46:38.800
comes

00:46:38.800 --> 00:46:38.900
to

00:46:38.900 --> 00:46:39.040
mind

00:46:39.040 --> 00:46:40.060
well

00:46:40.060 --> 00:46:40.620
okay

00:46:40.620 --> 00:46:40.800
so

00:46:40.800 --> 00:46:41.060
leaving

00:46:41.060 --> 00:46:41.220
out

00:46:41.220 --> 00:46:41.320
the

00:46:41.320 --> 00:46:41.500
ones

00:46:41.500 --> 00:46:41.600
that

00:46:41.600 --> 00:46:41.760
I've

00:46:41.760 --> 00:46:41.900
written

00:46:41.900 --> 00:46:42.400
myself

00:46:42.400 --> 00:46:42.940
because

00:46:42.940 --> 00:46:43.300
that

00:46:43.300 --> 00:46:44.060
seems

00:46:44.060 --> 00:46:44.360
a little

00:46:44.360 --> 00:46:44.880
unfair

00:46:44.880 --> 00:46:45.100
though

00:46:45.100 --> 00:46:45.360
I do

00:46:45.360 --> 00:46:45.600
like

00:46:45.600 --> 00:46:45.740
the

00:46:45.740 --> 00:46:46.040
project

00:46:46.040 --> 00:46:46.400
Oxford

00:46:46.400 --> 00:46:47.200
library

00:46:47.200 --> 00:46:47.780
which

00:46:47.780 --> 00:46:48.180
does

00:46:48.180 --> 00:46:49.040
text-to-speech

00:46:49.040 --> 00:46:49.440
and speech

00:46:49.440 --> 00:46:49.960
recognition

00:46:49.960 --> 00:46:50.420
and natural

00:46:50.420 --> 00:46:50.700
language

00:46:50.700 --> 00:46:51.220
understanding

00:46:51.220 --> 00:46:51.900
using

00:46:51.900 --> 00:46:52.820
what's

00:46:52.820 --> 00:46:53.260
now called

00:46:53.260 --> 00:46:53.720
the Cortana

00:46:53.720 --> 00:46:54.180
intelligence

00:46:54.180 --> 00:46:54.520
suite

00:46:54.520 --> 00:46:55.320
that's a

00:46:55.320 --> 00:46:55.640
fun little

00:46:55.640 --> 00:46:55.880
demo

00:46:55.880 --> 00:46:56.200
one that

00:46:56.200 --> 00:46:56.520
I wrote

00:46:56.520 --> 00:46:57.280
probably

00:46:57.280 --> 00:46:58.220
and certainly

00:46:58.220 --> 00:46:58.460
if you

00:46:58.460 --> 00:46:58.760
asked all

00:46:58.760 --> 00:46:59.240
my colleagues

00:46:59.240 --> 00:46:59.620
I talk

00:46:59.620 --> 00:46:59.820
about

00:46:59.820 --> 00:47:00.220
requests

00:47:00.220 --> 00:47:00.540
all the

00:47:00.540 --> 00:47:00.760
time

00:47:00.760 --> 00:47:01.480
and

00:47:01.480 --> 00:47:01.740
and

00:47:01.740 --> 00:47:01.940
that's

00:47:01.940 --> 00:47:02.260
largely

00:47:02.260 --> 00:47:02.580
because

00:47:02.580 --> 00:47:02.940
I keep

00:47:02.940 --> 00:47:03.200
seeing

00:47:03.200 --> 00:47:03.480
code

00:47:03.480 --> 00:47:03.700
that's

00:47:03.700 --> 00:47:04.080
using

00:47:04.080 --> 00:47:04.920
htplib

00:47:04.920 --> 00:47:05.600
and

00:47:05.600 --> 00:47:06.140
my answer

00:47:06.140 --> 00:47:06.500
is always

00:47:06.500 --> 00:47:06.900
just use

00:47:06.900 --> 00:47:07.360
requests

00:47:07.360 --> 00:47:07.680
please

00:47:07.680 --> 00:47:08.040
just use

00:47:08.040 --> 00:47:08.540
requests

00:47:08.540 --> 00:47:09.260
stop

00:47:09.260 --> 00:47:09.480
using

00:47:09.480 --> 00:47:09.740
anything

00:47:09.740 --> 00:47:10.080
that isn't

00:47:10.080 --> 00:47:10.520
requests

00:47:10.520 --> 00:47:11.020
so

00:47:11.020 --> 00:47:12.240
that's

00:47:12.240 --> 00:47:12.640
almost

00:47:12.640 --> 00:47:13.040
certainly

00:47:13.040 --> 00:47:13.320
my

00:47:13.320 --> 00:47:13.700
favorite

00:47:13.700 --> 00:47:14.100
library

00:47:14.100 --> 00:47:14.820
and

00:47:14.820 --> 00:47:15.100
if

00:47:15.100 --> 00:47:15.220
you

00:47:15.220 --> 00:47:15.440
have

00:47:15.440 --> 00:47:15.660
used

00:47:15.660 --> 00:47:16.380
htplib

00:47:16.380 --> 00:47:16.720
stop

00:47:16.720 --> 00:47:17.000
using

00:47:17.000 --> 00:47:17.140
it

00:47:17.140 --> 00:47:17.220
and

00:47:17.220 --> 00:47:17.360
use

00:47:17.360 --> 00:47:17.760
requests

00:47:17.760 --> 00:47:18.000
and

00:47:18.000 --> 00:47:18.140
you'll

00:47:18.140 --> 00:47:18.280
see

00:47:18.280 --> 00:47:18.540
why

00:47:18.540 --> 00:47:18.840
okay

00:47:18.840 --> 00:47:19.320
final call

00:47:19.320 --> 00:47:19.440
to

00:47:19.440 --> 00:47:19.620
action

00:47:19.620 --> 00:47:19.920
how do

00:47:19.920 --> 00:47:20.120
people

00:47:20.120 --> 00:47:20.440
get

00:47:20.440 --> 00:47:20.960
started

00:47:20.960 --> 00:47:21.200
with

00:47:21.200 --> 00:47:21.500
this

00:47:21.500 --> 00:47:22.280
this

00:47:22.280 --> 00:47:22.420
whole

00:47:22.420 --> 00:47:22.660
thing

00:47:22.660 --> 00:47:22.920
that

00:47:22.920 --> 00:47:22.980
you

00:47:22.980 --> 00:47:23.120
guys

00:47:23.120 --> 00:47:23.340
built

00:47:23.340 --> 00:47:24.200
so

00:47:24.200 --> 00:47:25.800
aka.ms

00:47:25.800 --> 00:47:26.280
slash

00:47:26.280 --> 00:47:26.700
python

00:47:26.700 --> 00:47:27.540
is

00:47:27.540 --> 00:47:28.240
our

00:47:28.240 --> 00:47:28.460
sort

00:47:28.460 --> 00:47:28.540
of

00:47:28.540 --> 00:47:28.800
short

00:47:28.800 --> 00:47:29.140
link

00:47:29.140 --> 00:47:29.320
and

00:47:29.320 --> 00:47:29.440
that

00:47:29.440 --> 00:47:29.560
will

00:47:29.560 --> 00:47:29.760
get

00:47:29.760 --> 00:47:29.900
you

00:47:29.900 --> 00:47:30.260
to

00:47:30.260 --> 00:47:30.780
right

00:47:30.780 --> 00:47:30.960
now

00:47:30.960 --> 00:47:31.080
it

00:47:31.080 --> 00:47:31.200
gets

00:47:31.200 --> 00:47:31.300
you

00:47:31.300 --> 00:47:31.380
to

00:47:31.380 --> 00:47:31.500
the

00:47:31.500 --> 00:47:31.680
visual

00:47:31.680 --> 00:47:31.980
studio

00:47:31.980 --> 00:47:32.320
page

00:47:32.320 --> 00:47:32.520
about

00:47:32.520 --> 00:47:32.860
Python

00:47:32.860 --> 00:47:33.320
support

00:47:33.320 --> 00:47:34.000
depending

00:47:34.000 --> 00:47:34.200
on

00:47:34.200 --> 00:47:34.400
when

00:47:34.400 --> 00:47:34.600
you

00:47:34.600 --> 00:47:35.000
come

00:47:35.000 --> 00:47:35.160
back

00:47:35.160 --> 00:47:35.300
and

00:47:35.300 --> 00:47:35.460
listen

00:47:35.460 --> 00:47:35.600
to

00:47:35.600 --> 00:47:35.740
this

00:47:35.740 --> 00:47:36.220
podcast

00:47:36.220 --> 00:47:36.480
it

00:47:36.480 --> 00:47:36.620
may

00:47:36.620 --> 00:47:36.740
be

00:47:36.740 --> 00:47:36.940
pointing

00:47:36.940 --> 00:47:37.260
somewhere

00:47:37.260 --> 00:47:37.460
else

00:47:37.460 --> 00:47:37.600
but

00:47:37.600 --> 00:47:37.800
that's

00:47:37.800 --> 00:47:38.020
always

00:47:38.020 --> 00:47:38.220
going

00:47:38.220 --> 00:47:38.340
to

00:47:38.340 --> 00:47:38.540
point

00:47:38.540 --> 00:47:38.700
to

00:47:38.700 --> 00:47:38.840
the

00:47:38.840 --> 00:47:39.120
best

00:47:39.120 --> 00:47:39.540
landing

00:47:39.540 --> 00:47:39.880
page

00:47:39.880 --> 00:47:40.260
for

00:47:40.260 --> 00:47:40.920
whatever

00:47:40.920 --> 00:47:41.260
Python

00:47:41.260 --> 00:47:41.520
stuff

00:47:41.520 --> 00:47:41.640
is

00:47:41.640 --> 00:47:41.800
going

00:47:41.800 --> 00:47:41.920
on

00:47:41.920 --> 00:47:42.020
at

00:47:42.020 --> 00:47:42.380
Microsoft

00:47:42.380 --> 00:47:43.400
probably

00:47:43.400 --> 00:47:43.720
the

00:47:43.720 --> 00:47:44.220
second

00:47:44.220 --> 00:47:44.600
one

00:47:44.600 --> 00:47:45.240
is

00:47:45.240 --> 00:47:46.200
aka.ms

00:47:46.200 --> 00:47:46.480
slash

00:47:46.480 --> 00:47:46.860
python

00:47:46.860 --> 00:47:47.300
blog

00:47:47.300 --> 00:47:48.060
which

00:47:48.060 --> 00:47:48.440
is

00:47:48.440 --> 00:47:48.820
our

00:47:48.820 --> 00:47:49.120
team's

00:47:49.120 --> 00:47:49.360
blog

00:47:49.360 --> 00:47:49.880
so

00:47:49.880 --> 00:47:50.220
we're

00:47:50.220 --> 00:47:50.700
posting

00:47:50.700 --> 00:47:51.220
about

00:47:51.220 --> 00:47:51.440
once

00:47:51.440 --> 00:47:51.580
a

00:47:51.580 --> 00:47:51.860
week

00:47:51.860 --> 00:47:52.520
on

00:47:52.520 --> 00:47:52.960
everything

00:47:52.960 --> 00:47:53.380
from

00:47:53.380 --> 00:47:53.560
what

00:47:53.560 --> 00:47:53.640
are

00:47:53.640 --> 00:47:53.740
we

00:47:53.740 --> 00:47:53.940
doing

00:47:53.940 --> 00:47:54.080
at

00:47:54.080 --> 00:47:54.380
Microsoft

00:47:54.380 --> 00:47:54.620
with

00:47:54.620 --> 00:47:54.960
Python

00:47:54.960 --> 00:47:55.480
what

00:47:55.480 --> 00:47:55.800
is

00:47:55.800 --> 00:47:56.000
going

00:47:56.000 --> 00:47:56.140
on

00:47:56.140 --> 00:47:56.220
in

00:47:56.220 --> 00:47:56.300
the

00:47:56.300 --> 00:47:56.720
community

00:47:56.720 --> 00:47:57.460
what

00:47:57.460 --> 00:47:57.700
some

00:47:57.700 --> 00:47:57.920
ways

00:47:57.920 --> 00:47:58.060
of

00:47:58.060 --> 00:47:58.440
improving

00:47:58.440 --> 00:47:58.640
your

00:47:58.640 --> 00:47:58.880
coding

00:47:58.880 --> 00:47:59.340
style

00:47:59.340 --> 00:48:00.040
and

00:48:00.040 --> 00:48:01.040
that's

00:48:01.040 --> 00:48:01.540
where

00:48:01.540 --> 00:48:01.920
you'll

00:48:01.920 --> 00:48:02.040
get

00:48:02.040 --> 00:48:02.180
the

00:48:02.180 --> 00:48:02.380
latest

00:48:02.380 --> 00:48:02.620
news

00:48:02.620 --> 00:48:02.960
about

00:48:02.960 --> 00:48:03.560
whatever

00:48:03.560 --> 00:48:03.860
Python

00:48:03.860 --> 00:48:04.080
stuff

00:48:04.080 --> 00:48:04.180
is

00:48:04.180 --> 00:48:04.320
going

00:48:04.320 --> 00:48:04.440
on

00:48:04.440 --> 00:48:04.520
at

00:48:04.520 --> 00:48:04.820
Microsoft

00:48:04.820 --> 00:48:05.620
I set

00:48:05.620 --> 00:48:05.860
it up

00:48:05.860 --> 00:48:06.260
the other

00:48:06.260 --> 00:48:06.540
day

00:48:06.540 --> 00:48:08.160
on my

00:48:08.160 --> 00:48:08.720
fresh new

00:48:08.720 --> 00:48:08.980
version

00:48:08.980 --> 00:48:09.080
of

00:48:09.080 --> 00:48:09.280
Windows

00:48:09.280 --> 00:48:09.560
10

00:48:09.560 --> 00:48:10.060
and

00:48:10.060 --> 00:48:10.720
it

00:48:10.720 --> 00:48:10.960
was

00:48:10.960 --> 00:48:11.320
no

00:48:11.320 --> 00:48:11.600
problem

00:48:11.600 --> 00:48:11.840
nice

00:48:11.840 --> 00:48:12.120
and easy

00:48:12.120 --> 00:48:12.360
just

00:48:12.360 --> 00:48:12.920
install

00:48:12.920 --> 00:48:13.540
Visual Studio

00:48:13.540 --> 00:48:14.100
install

00:48:14.100 --> 00:48:14.800
Python

00:48:14.800 --> 00:48:15.160
tools

00:48:15.160 --> 00:48:15.440
and

00:48:15.440 --> 00:48:15.900
file

00:48:15.900 --> 00:48:16.060
new

00:48:16.060 --> 00:48:16.400
project

00:48:16.400 --> 00:48:16.800
pick

00:48:16.800 --> 00:48:17.000
your

00:48:17.000 --> 00:48:17.440
Python

00:48:17.440 --> 00:48:17.840
flavor

00:48:17.840 --> 00:48:18.040
and

00:48:18.040 --> 00:48:18.200
go

00:48:18.200 --> 00:48:18.440
right

00:48:18.440 --> 00:48:19.180
it's

00:48:19.180 --> 00:48:19.300
very

00:48:19.300 --> 00:48:19.500
nice

00:48:19.500 --> 00:48:20.000
I'd

00:48:20.000 --> 00:48:20.180
also

00:48:20.180 --> 00:48:20.400
like

00:48:20.400 --> 00:48:20.480
to

00:48:20.480 --> 00:48:20.600
add

00:48:20.600 --> 00:48:20.740
one

00:48:20.740 --> 00:48:20.880
more

00:48:20.880 --> 00:48:21.100
thing

00:48:21.100 --> 00:48:21.720
people

00:48:21.720 --> 00:48:22.040
out there

00:48:22.040 --> 00:48:22.300
listening

00:48:22.300 --> 00:48:22.880
who

00:48:22.880 --> 00:48:23.440
haven't

00:48:23.440 --> 00:48:23.680
checked

00:48:23.680 --> 00:48:23.840
out

00:48:23.840 --> 00:48:23.960
what

00:48:23.960 --> 00:48:24.220
Microsoft

00:48:24.220 --> 00:48:24.380
is

00:48:24.380 --> 00:48:24.560
doing

00:48:24.560 --> 00:48:24.760
for

00:48:24.760 --> 00:48:25.060
a while

00:48:25.060 --> 00:48:25.380
you

00:48:25.380 --> 00:48:25.660
should

00:48:25.660 --> 00:48:26.160
check out

00:48:26.160 --> 00:48:26.420
the

00:48:26.420 --> 00:48:26.740
build

00:48:26.740 --> 00:48:28.320
keynotes

00:48:28.320 --> 00:48:29.020
I'll link

00:48:29.020 --> 00:48:29.300
to them

00:48:29.300 --> 00:48:29.740
in the

00:48:29.740 --> 00:48:30.140
show notes

00:48:30.140 --> 00:48:30.540
there's

00:48:30.540 --> 00:48:30.760
some

00:48:30.760 --> 00:48:31.340
really

00:48:31.340 --> 00:48:31.660
different

00:48:31.660 --> 00:48:31.940
stuff

00:48:31.940 --> 00:48:32.260
happening

00:48:32.260 --> 00:48:32.620
at

00:48:32.620 --> 00:48:32.940
Microsoft

00:48:32.940 --> 00:48:33.360
than

00:48:33.360 --> 00:48:34.240
5-10

00:48:34.240 --> 00:48:34.420
years

00:48:34.420 --> 00:48:34.660
ago

00:48:34.660 --> 00:48:34.940
yeah

00:48:34.940 --> 00:48:35.540
it's

00:48:35.540 --> 00:48:35.980
very

00:48:35.980 --> 00:48:36.520
exciting

00:48:36.520 --> 00:48:37.860
I love

00:48:37.860 --> 00:48:38.260
that we're

00:48:38.260 --> 00:48:38.720
really

00:48:38.720 --> 00:48:39.080
getting

00:48:39.080 --> 00:48:39.560
innovating

00:48:39.560 --> 00:48:39.960
again

00:48:39.960 --> 00:48:40.520
definitely

00:48:40.520 --> 00:48:41.000
congrats

00:48:41.000 --> 00:48:41.480
on all

00:48:41.480 --> 00:48:41.760
the stuff

00:48:41.760 --> 00:48:42.000
you guys

00:48:42.000 --> 00:48:42.280
are doing

00:48:42.280 --> 00:48:43.040
Steve

00:48:43.040 --> 00:48:43.460
it was

00:48:43.460 --> 00:48:43.660
great

00:48:43.660 --> 00:48:43.840
to have

00:48:43.840 --> 00:48:43.920
you

00:48:43.920 --> 00:48:44.000
on

00:48:44.000 --> 00:48:44.100
the

00:48:44.100 --> 00:48:44.260
show

00:48:44.260 --> 00:48:44.540
thanks

00:48:44.540 --> 00:48:44.820
for

00:48:44.820 --> 00:48:45.280
giving

00:48:45.280 --> 00:48:45.460
us

00:48:45.460 --> 00:48:45.580
an

00:48:45.580 --> 00:48:49.240
this

00:48:49.240 --> 00:48:49.480
has

00:48:49.480 --> 00:48:49.620
been

00:48:49.620 --> 00:48:49.880
another

00:48:49.880 --> 00:48:50.240
episode

00:48:50.240 --> 00:48:50.560
of

00:48:50.560 --> 00:48:50.820
talk

00:48:50.820 --> 00:48:51.140
python

00:48:51.140 --> 00:48:51.300
to

00:48:51.300 --> 00:48:51.440
me

00:48:51.440 --> 00:48:52.040
today's

00:48:52.040 --> 00:48:52.240
guest

00:48:52.240 --> 00:48:52.420
was

00:48:52.420 --> 00:48:52.700
Steve

00:48:52.700 --> 00:48:53.000
Dower

00:48:53.000 --> 00:48:53.440
and this

00:48:53.440 --> 00:48:53.740
episode

00:48:53.740 --> 00:48:54.000
has been

00:48:54.000 --> 00:48:54.340
sponsored

00:48:54.340 --> 00:48:54.620
by

00:48:54.620 --> 00:48:55.380
snapcii

00:48:55.380 --> 00:48:55.600
and

00:48:55.600 --> 00:48:56.140
opbeat

00:48:56.140 --> 00:48:56.960
thank you

00:48:56.960 --> 00:48:57.160
guys

00:48:57.160 --> 00:48:57.340
for

00:48:57.340 --> 00:48:57.660
supporting

00:48:57.660 --> 00:48:57.840
the

00:48:57.840 --> 00:48:58.100
show

00:48:58.100 --> 00:48:59.580
snapcii

00:48:59.580 --> 00:48:59.780
is

00:48:59.780 --> 00:49:00.180
modern

00:49:00.180 --> 00:49:00.760
continuous

00:49:00.760 --> 00:49:01.200
integration

00:49:01.200 --> 00:49:01.420
and

00:49:01.420 --> 00:49:01.740
delivery

00:49:01.740 --> 00:49:02.400
build

00:49:02.400 --> 00:49:02.720
test

00:49:02.720 --> 00:49:02.860
and

00:49:02.860 --> 00:49:03.080
deploy

00:49:03.080 --> 00:49:03.240
your

00:49:03.240 --> 00:49:03.420
code

00:49:03.420 --> 00:49:03.880
directly

00:49:03.880 --> 00:49:04.100
from

00:49:04.100 --> 00:49:04.420
github

00:49:04.420 --> 00:49:04.960
all

00:49:04.960 --> 00:49:05.080
in

00:49:05.080 --> 00:49:05.180
your

00:49:05.180 --> 00:49:05.440
browser

00:49:05.440 --> 00:49:05.680
with

00:49:05.680 --> 00:49:06.040
debugging

00:49:06.040 --> 00:49:06.560
docker

00:49:06.560 --> 00:49:06.800
and

00:49:06.800 --> 00:49:07.400
parallelism

00:49:07.400 --> 00:49:08.000
included

00:49:08.000 --> 00:49:08.680
try them

00:49:08.680 --> 00:49:09.060
for free

00:49:09.060 --> 00:49:09.300
at

00:49:09.300 --> 00:49:10.140
snap.cii

00:49:10.140 --> 00:49:10.500
slash

00:49:10.500 --> 00:49:10.840
talk

00:49:10.840 --> 00:49:11.320
python

00:49:11.320 --> 00:49:13.160
opbeat

00:49:13.160 --> 00:49:13.400
is

00:49:13.400 --> 00:49:13.680
mission

00:49:13.680 --> 00:49:14.160
control for

00:49:14.160 --> 00:49:16.400
your

00:49:16.400 --> 00:49:16.620
python

00:49:16.620 --> 00:49:16.820
web

00:49:16.820 --> 00:49:17.500
applications

00:49:17.500 --> 00:49:21.260
keep an eye on errors, performance, profiling, and more in your Django, Flask, and even pyramid web apps.

00:49:21.260 --> 00:49:25.080
Tell them thanks for supporting the show on Twitter where they're at opbeat.

00:49:25.080 --> 00:49:29.920
I use both of these products on all the talk python web properties and you should check them out too.

00:49:29.920 --> 00:49:31.100
They're really excellent. Seriously.

00:49:31.100 --> 00:49:33.860
Are you or a colleague trying to learn python?

00:49:33.860 --> 00:49:38.280
Have you tried boring books and videos that just cover the topic point by point?

00:49:38.280 --> 00:49:44.120
Check out my online course python jumpstart by building 10 apps at training.talkpython.fm.

00:49:44.120 --> 00:49:46.140
The reviews so far have been fantastic.

00:49:46.140 --> 00:49:52.400
You can find the links from the show at talkpython.fm/episodes slash show slash 53.

00:49:52.400 --> 00:49:54.580
And be sure to subscribe to the show.

00:49:54.580 --> 00:49:56.660
Open your favorite podcatcher and search for Python.

00:49:56.660 --> 00:49:57.820
We should be right at the top.

00:49:57.820 --> 00:50:01.440
You can also find the iTunes and direct RSS feeds in the footer of the website.

00:50:01.440 --> 00:50:06.200
Our theme music is Developers, Developers, Developers by Corey Smith, who goes by Smix.

00:50:06.200 --> 00:50:08.960
You can hear the entire song on talkpython.fm.

00:50:09.460 --> 00:50:10.700
This is your host, Michael Kennedy.

00:50:10.700 --> 00:50:13.040
As always, thank you so much for listening.

00:50:13.040 --> 00:50:14.260
I really appreciate it.

00:50:14.260 --> 00:50:17.160
Smix, it's time to take us out of here.

00:50:17.160 --> 00:50:19.460
It's dating with my voice.

00:50:19.460 --> 00:50:21.240
There's no norm that I can feel within.

00:50:21.240 --> 00:50:22.460
Haven't been sleeping.

00:50:22.460 --> 00:50:24.080
I've been using lots of rest.

00:50:24.080 --> 00:50:26.940
I'll pass the mic back to who rocked it best.

00:50:27.580 --> 00:50:39.260
I'll pass the mic back to who rocked it best.

00:50:39.260 --> 00:51:09.240
Thank you.

