00:00 What's your favorite Python editor?
00:01 That's one of the questions I always ask at the end of each episode.
00:04 This week, I want to shine a light on a fantastic answer to that question for Windows developers.
00:09 Visual Studio.
00:11 On this episode, you'll meet Steve Dower, a Python core developer from Microsoft's Python Tools for Visual Studio team.
00:18 He's here to tell us all about it.
00:19 We also cover Python on Windows, Cpython, the 2016 Build Conference, and more.
00:25 This is Talk Python to Me, episode number 53, recorded April 4th, 2016.
00:30 Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities.
00:59 This is your host, Michael Kennedy.
01:02 Follow me on Twitter, where I'm @mkennedy.
01:04 Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via at Talk Python.
01:10 This episode is brought to you by SnapCI and OpBeat.
01:14 Thank them for supporting the show on Twitter via snap underscore CI and OpBeat.
01:19 Steve, welcome to the show.
01:21 Hi, Michael. Thanks for having me.
01:22 Yeah, we've got some really cool stuff to talk about.
01:24 I'm super excited to talk about what you guys at Microsoft are up to with bringing Python into all of your major dev products,
01:32 Visual Studio, Azure, those sorts of things.
01:34 Yeah, no, it's really exciting.
01:35 We've been working on a lot of this stuff for a number of years, and it's really hitting a point where it's starting to come together,
01:41 and people are making good use of it.
01:42 So it's very exciting.
01:44 Yeah, I bet it is.
01:45 And we're going to totally dig into that.
01:46 But, like always, let's get started at the beginning.
01:49 Tell me your story.
01:50 How do you get into Python, programming, that sort of thing?
01:52 So my first Python experience was I got a holiday job at a startup company
01:57 that was doing medical devices.
01:59 And they had this ridiculously complicated C++ app for controlling the device
02:05 that was scriptable with Python.
02:07 So my job was basically writing the Python scripts to control these medical devices while we were testing them.
02:13 And then after that, I started grad school, and one of my supervisors said,
02:18 hey, you should pick up all of this code that I've done previously and use some of that.
02:22 And I kind of looked at him and said, is this going to help with your work?
02:26 And he's like, yeah, yeah, of course it is.
02:28 But that was all in Python.
02:29 So at that point, I was neck deep in it and have not yet seen a reason to come out.
02:36 Yeah, it's a really nice environment, isn't it?
02:38 It's great.
02:39 It's just so flexible.
02:40 And it has so much power that users don't actually have to see in the code that they write.
02:45 One of my favorite things is writing really complex libraries that look incredibly simple to use.
02:51 And Python's magic, metaclasses, decorators, makes that just really nice.
02:57 You can do a lot of stuff that people never actually see or have to know about.
03:00 So you'd say that's kind of a different experience than if I was writing C++ with templates and multiple inherences
03:05 and all that kind of stuff, right?
03:06 C++.
03:09 I actually put C++ in the same category.
03:11 I quite like writing templates in C++, yeah.
03:14 But it's definitely a different category from Java or C Sharp where you just don't have the ability to hide so much
03:20 of the implementation from what users get to see in the code.
03:23 So the interfaces are a bit more restricted in those languages and you use what you get.
03:28 Yeah, that's for sure.
03:29 You work at Microsoft.
03:30 You said you've been there like four years or so, right?
03:33 Yep, coming up on four years, which means following our usual tradition,
03:36 I need to provide four pounds of candy for everyone, which I'm sure my weight-conscious colleagues
03:43 are not looking forward to, but I'll make them indulge.
03:46 There you go.
03:46 That would probably be easier to do if your job anniversary was around Halloween.
03:50 The stores are stocked.
03:52 Yes.
03:53 With candy.
03:54 Or just after and then get all the discounted stuff.
03:57 Exactly.
03:57 That'd be the best time.
03:59 So how'd you get there?
04:00 I actually got there through contributing to the Python Tools for Visual Studio
04:04 that I'm working on now.
04:05 That was one of the earliest open source projects to be done out of Microsoft.
04:10 It was one of the very first to accept external contributions, and so I was contributing.
04:14 And that led to an offer of an internship, and so they brought me out from Australia for three months.
04:20 And the nicest three months of the year in Seattle are June, July, August,
04:24 so they brought me for those three months and got to the end and said, what do you think?
04:28 Do you want to stay?
04:28 And I'm like, wow, it was beautiful weather.
04:30 It was sunny.
04:31 It wasn't too hot.
04:32 This sounds great.
04:33 Yeah, I'll come back.
04:33 And so, yeah, I was contributing to an open source project that turned into a full-time job and a career
04:40 writing open source projects at Microsoft.
04:43 Yeah, that's really awesome.
04:44 I think those months that I think, you know, I spend a lot of my time in Portland,
04:48 and we have basically the same weather.
04:51 Those are like the marketing months, right?
04:54 People fall in love with the city and the surroundings then, and then the season of rain comes for the next six months.
05:00 Yeah, it's a complete bait and switch.
05:01 It is.
05:02 But you know what's really good is you're not driven to go outside.
05:06 You're not pulled to go out into the nice weather.
05:07 You can just focus, do some programming for six months, and come back out when the sun shines.
05:11 Yeah, and it's almost like they deliberately put the offices somewhere where people are going to stay in the office for longer.
05:16 Yes, it is strange that way.
05:18 Very nice.
05:19 So that's great.
05:20 I expect back in that time frame, not so many people were hired at Microsoft to write open source.
05:26 I don't honestly know how many people were doing it at that time.
05:29 There were not many.
05:30 So my team worked really hard to get the Visual Studio support for Python
05:35 to be written as an open source project, and many, many meetings with lawyers.
05:40 I mean, these days, to release something under the MIT license or the Apache license is really, really easy.
05:46 But at that point, they spent months dealing with lawyers, explaining what everything meant,
05:51 letting the lawyers do their research and find their backgrounds and just figure out,
05:56 is it safe for us to be releasing this stuff under this license?
05:59 What's our risk?
06:00 What could go wrong?
06:02 And eventually, the team just pushed hard enough to make it happen.
06:05 And without that, there was no open source coming out of Microsoft for the largest part.
06:10 Yeah, that's really cool.
06:11 And back then, that was such a new idea, at least in that space.
06:16 Obviously, open source had been alive and thriving, but large corporations doing major open source
06:22 outside of a few places like Red Hat.
06:24 That was pretty rare.
06:25 So it's cool that you kind of got to be part of that seed there.
06:29 And I think in the early days in Microsoft, a lot of their attempts to do open source
06:35 came in what I'd consider like source open rather than open source, which means you may see the source,
06:41 but there's not the pull requests and take backs.
06:44 And this stuff wasn't really there in the early days for a lot of the projects.
06:48 Like I'm thinking of ASP.NET, for example.
06:49 Yeah, absolutely.
06:50 And some of the licensing that we did, again, it's all about managing risk.
06:54 And clearly, at some point, there were a couple of lawyers that, or the entire legal department,
07:01 decided that the best way to manage that risk would be to create licenses that had exactly the clauses
07:06 that we were concerned about.
07:08 And so we had the Microsoft public license, Microsoft reciprocal license,
07:12 were invented and used for a while.
07:15 And fundamentally, I don't think there's anything wrong with those licenses,
07:18 apart from the fact that they weren't the ones being used by the community at that point.
07:23 And they never really became common use in the community.
07:26 So people who are used to saying, oh, this is Apache, this is MIT, this is BSD,
07:31 I know what these mean, these are familiar, suddenly you see an unfamiliar license.
07:35 And without being a lawyer, going through and figuring out that it's the same is,
07:39 it's not a difficult task, but it's legal work.
07:43 And so I think people were just seeing those licenses going, I don't really trust this,
07:49 I don't know this, I don't understand this.
07:51 Much the same as the people who created those licenses were probably looking at the other ones going,
07:56 we don't understand these, we don't trust these.
07:58 What if, what if, what if?
08:00 Yeah, this is so different than my corporate software EULA agreement I normally have,
08:05 this MIT thing, so bizarre.
08:07 Yeah, and there's basically no language shared between the two.
08:11 If you go and actually read some of the corporate EULAs, that nobody spends that much time looking over.
08:17 And I'm sure there's some very disappointed lawyers who put a lot of effort into writing those,
08:21 that most people don't actually read them.
08:23 Yeah, that's too bad.
08:24 I guess probably in the early days, those types of licenses felt just like,
08:28 oh, here's a company trying to do open source, but they obviously don't fit in.
08:34 They just look different.
08:35 So they must not really be doing it or something.
08:37 But you guys have adopted the more mainstream stuff these days.
08:40 You've moved a lot of your source code to GitHub.
08:43 You've got more standard licenses, things like that, right?
08:45 Yeah, and at this point, as I said, for teams that want to do open source work within Microsoft,
08:51 basically the only choice of license is MIT these days.
08:55 Apache 2 still gets some use, and I think there's a slight movement away from that,
08:59 just in terms of what I'm seeing happen at the company.
09:02 It's all about where are people actually doing this?
09:05 How are they actually doing it?
09:06 And we've also had sort of a generation of engineers coming in who are familiar with all this.
09:11 So basically everyone working at the company that's under 30 has used GitHub for their own projects.
09:17 They've been using proper open source.
09:19 They've been releasing their own code under open source for years already.
09:23 And so they come in, and suddenly you've got this entire band of junior engineers
09:27 who know how it should be done, know how everyone else expects it to be done,
09:31 and is willing to push and make it happen.
09:33 So over time, we have definitely moved to a much better place as far as having,
09:38 as far as, I don't like saying joining the open source community because it sounds like it's really forced,
09:43 but we've definitely got more products that are considered genuinely open source projects at this point.
09:50 Yeah, definitely embracing the concept and the community of open source more.
09:54 So that's cool.
09:55 So let's talk about Visual Studio and specifically the Python support that you guys built.
10:00 Now, I have a pretty wide range of listeners.
10:02 I suspect most of them know what Visual Studio is and the history there,
10:06 but could you give us like the 30-second pitch on what is Visual Studio,
10:09 where did it come from, and why is it special that it has Python support now?
10:14 I suspect Visual Studio is probably older than me in a lot of ways.
10:18 It's a very old project that's basically Microsoft's development platform.
10:24 So developers who need access to editors, tools, debuggers, and all of the things that come with building
10:32 and managing and releasing software typically find themselves inside Visual Studio.
10:36 I first started using it as Visual Basic 4, which was a long, long time ago,
10:41 and it's grown out of that.
10:44 I don't have the full history hand here in my mind.
10:47 I mean, at that point, I was a hobbyist and not an employee.
10:51 But these days, Visual Studio is very much the development platform.
10:55 It's the integrated environment that has all of the editors, all of the tools,
11:00 all the languages that Microsoft supports development in go through Visual Studio,
11:04 all of our platforms that you may want to build things for or deploy things to.
11:09 So everything from Xbox through to phones, which includes all phone OSs at this point.
11:15 You'll go through Visual Studio for building, debugging, deploying, testing.
11:19 It really is the home for Microsoft developers.
11:23 Yeah, so bringing Python support to that is something that our team has been really keen to do for a long time
11:30 just because it's already the home for so many developers.
11:34 And so people who are using C++ or people who are using JavaScript and may want an alternative for another language
11:41 have historically been switching out to other editors.
11:44 And there's no need for that.
11:46 I mean, Visual Studio has great support for so many languages that having Python in there as well
11:51 is something that we've always been really keen to have.
11:54 So we've been working on that for years.
11:55 And at this point, it's right up there with the other languages, which is great to see.
12:00 Yeah, that's really great to see.
12:01 And we don't often just work in one language anymore, right?
12:05 Like, if you're going to build a web app, you're probably doing some T-SQL.
12:09 You're doing Python.
12:11 Obviously, if you're doing it in Python, you'll be doing some CSS, some HTML, some JavaScript.
12:16 And the fact that Visual Studio is really good at all of those things and now Python as well,
12:22 that's really cool because it brings them all together really in one place.
12:26 You don't have to jump around, like you said.
12:27 So can you maybe contrast, like, the development experience with, say, like Sublime or Emacs?
12:34 Like, why would somebody who's like, I love Sublime, start super fast, it's lightweight, it's free,
12:39 unless you pay for it.
12:41 But it'll let you use it for free, basically.
12:42 I think it's $59 officially.
12:45 And contrast that with, like, Visual Studio.
12:48 Like, how much does Visual Studio cost to get going with?
12:51 Depending on what you're planning on doing with it, Visual Studio is probably free.
12:55 Visual Studio Community Edition was released, what was that, a year, two years ago?
13:00 And that's still part of the current release, is the free version.
13:04 And that's available if you're basically not a huge company or you're working on open source software.
13:10 You can freely use Community Edition, which has all of the features of the Professional Edition.
13:16 It doesn't have the enterprise-level features, but that's mostly, I believe,
13:22 application lifecycle management stuff that, well, some people absolutely love it, require it,
13:27 and we use it a lot internally at Microsoft.
13:29 It's not critical for small projects.
13:31 And certainly, if you're using GitHub or some form of public issue tracker,
13:35 it's not actually that valuable for you, given my understanding.
13:38 But the free version is widely available, and that includes all functionality.
13:44 And everything from Python support, Node.js support, and even as we just announced the other week,
13:51 that's going to include Xamarin for all the cross-platform work that people want to do these days.
13:56 Yeah, Xamarin's an interesting story.
13:58 I don't want to go down that rabbit hole, but just so people maybe don't know,
14:03 Microsoft purchased Xamarin about a month ago.
14:06 And Xamarin is basically a development environment for taking code, C-sharp code,
14:13 and building cross-platform apps that feel native, right?
14:17 Like, for example, I learned at Build, watching some of the Build videos,
14:21 doing some research on this stuff, that Slack builds their mobile apps with Xamarin.
14:27 That's pretty cool.
14:27 This episode is brought to you by SnapCI, the only hosted cloud-based continuous integration
14:48 and delivery solution that offers multi-stage pipelines as a built-in feature.
14:53 SnapCI is built to follow best practices like automated builds, testing before integration,
14:58 and provides high visibility into who's doing what.
15:01 Just connect Snap to your GitHub repo and it automatically builds the first pipeline for you.
15:06 It's simple enough for those who are new to continuous integration, yet powerful enough to run
15:11 dozens of parallel pipelines.
15:13 More reliable and frequent releases.
15:15 That's Snap.
15:16 For a free, no-obligation, 30-day trial, just go to snap.ci slash talkpython.
15:22 Yeah, no, it's really nice to have, like, getting back to the right ones run anywhere,
15:36 but it's a genuine run in the place where you are and not sort of the old
15:41 completely locked-down virtual machine run anywhere that we had in the early days of Java.
15:46 Yeah, where you'd open an about box and it looked clearly foreign.
15:50 Yeah, exactly.
15:51 You'd open it like a file browser and it was obviously not part of the OS
15:55 or something like that, right?
15:56 Yep.
15:56 Compared to something like Sublime that's sort of really lightweight, Visual Studio,
16:01 you're going to find a more featureful experience.
16:03 So, I know a lot of people love Sublime because it opens quickly.
16:07 Visual Studio can open quickly, quite often, and they're certainly always working on improving that.
16:12 But the big difference is once you're in, Visual Studio has much, much better IntelliSense
16:17 for every language that it supports than you'll find in a lightweight text editor.
16:21 And even a lot of the plugins for Emacs and VI don't actually reach the same level of intelligence
16:28 about your code that we have in Visual Studio.
16:31 So, things like understanding decorators, recognizing what types have gone into a tuple,
16:37 and then when you expand that out later, we still know those types.
16:41 Things like what items have been added to a list.
16:43 So, when you iterate over that list later, we can say, yeah, we know it's one of these types
16:47 because these are all the things that you've put into the list everywhere else in your code
16:51 for this particular list.
16:53 Right.
16:53 So, you get like IntelliSense on the item to the list in your foreign loops,
16:56 for example, right?
16:57 Yeah.
16:58 Which demos really nicely most of the time.
17:00 But it is certainly a feature that's very unique to the integrated development environments,
17:05 the bigger, heavier weight tools that I guess the current generation of advanced text editors
17:12 we're seeing like Sublime, like Atom, like Notepad++, just don't have that same level
17:17 of intelligence about the code.
17:19 I think that sums it up pretty well.
17:20 And people who listen to the show a lot know that I kind of come down on preferring the heavyweight IDE stuff
17:26 that really helps once you get it started with large projects and understanding your code.
17:30 But I know that not everyone is that way.
17:32 So, it's interesting to look at the both sides.
17:35 Yeah.
17:35 Yeah.
17:35 And it's definitely interesting to see the difference between different communities of people
17:41 when it comes to this.
17:43 Because I find so, at Build last week, talking to a largely Microsoft audience,
17:46 everybody knows Visual Studio, everyone loves it, and they don't really know Python that well.
17:51 But that means that when you get up and show IntelliSense demos, they're just not impressed
17:56 because they're used to Visual Studio.
17:58 And they're like, well, you're in Visual Studio.
17:59 Of course you get IntelliSense.
18:01 Why are you showing me this?
18:03 Whereas when you go to the Python audience, and even people who will flat out say,
18:06 I don't want to use an integrated environment, it's too heavyweight, it doesn't add any features,
18:11 and then you show them that you can go to any variable and hit F12 and see everywhere that it's been assigned,
18:17 or go to the very first place it was defined.
18:19 You can override and monkey patch functions and see all the places where those were changed
18:25 and where they all came from.
18:26 And suddenly they go, oh, wow, this is amazing.
18:28 Maybe I do want the heavyweight environment if it has this kind of magic functionality in it.
18:34 That's right.
18:34 Maybe it's worth waiting that three seconds for it to start or whatever,
18:37 because you're going to be in it for the whole day.
18:39 So let's talk about some of the features.
18:41 Before we do, one thing that you mentioned in some of your conversations
18:46 in Build Conference was sort of about Iron Python and Python 2 and Python 3 support,
18:51 specifically CPython.
18:52 Some people listening might be thinking, well, this is Microsoft, it's Windows, it's Iron Python,
18:56 which is the Python that runs on top of the .NET CLR.
19:00 Yeah, so Iron Python was a project started at Microsoft.
19:04 I don't remember exactly when, possibly as long as 10 years ago at this point.
19:08 When they were building the common language runtime, there was a small team that decided
19:13 we should build a dynamic language runtime on top of this as well.
19:17 So effectively using the .NET platform to do dynamic languages.
19:21 And as part of that, they built Iron Python and Iron Ruby to use that runtime
19:25 as, you know, you need to make sure that it's actually valid by doing something useful with it.
19:30 And then when that project eventually was not advancing any further in that form
19:36 and some pieces were taken and used for other things, so people familiar
19:40 with the dynamic keyword in C Sharp will probably recognize that that came out of that work.
19:45 But Iron Python and Iron Ruby were effectively pushed out to the community
19:49 around about 2009, 2010.
19:51 And since then, Iron Python's been maintained externally.
19:55 Microsoft has nothing official to do with it anymore, though we do occasionally
19:59 contribute to it.
20:00 But it is, it's Python on top of .NET.
20:03 And a lot of people still use it.
20:04 It gets a lot of love, especially from people who have sort of C Sharp or F Sharp assemblies
20:11 that they want to use from Python or they want to test from Python because it's so natural
20:14 to just load those up with an import statement and call into it.
20:18 But there is a big assumption that being Microsoft, that's all we care about.
20:23 And that's absolutely not the case at this stage and hasn't been for six years.
20:27 When that project was released and we started on the Visual Studio support,
20:31 it was really, really clear that 99 plus percent of Python developers were using CPython
20:38 and there was just no way that we could cut those people out and say, well, you've all got to switch
20:44 to .NET to use this.
20:45 That would have been just ridiculous.
20:47 So we didn't do it.
20:47 Yeah, and the guys with things like NumPy, they're like, you know, I kind of like this library.
20:52 I'd like to see integration with this package and I don't want to just do some .NET thing.
20:58 So obviously, right?
20:59 Yeah, and NumPy is hard enough to build on Windows already that we wouldn't want
21:05 to be forcing people to have to build it as part of IronPython.
21:07 Though we did try that for a while.
21:09 There was a project to get that working that eventually just ran into too many issues.
21:13 But yeah, CPython is sort of the main star of the show.
21:17 for us.
21:18 So the Visual Studio support extends from CPython 2.5 through to 3.5 with every version in between
21:25 and 32-bit, 64-bit and everything from debugging, profiling, IntelliSense.
21:32 We have all the context-sensitive keywords like async and await.
21:36 We handle all the future imports for CPython properly and all the other interpreters
21:41 are supported as well.
21:43 And frankly, they tend to come off a bit like a second thought compared to CPython.
21:50 We're very much focused on the same area that the entire Python community
21:53 is focused on.
21:54 So PyPy, Jython, IronPython, we test, we use a bit, but CPython gets the bulk
22:01 of the work.
22:02 I kind of feel like the entire community is just going to use CPython unless there's some
22:06 huge pressure from a performance problem or some other type of thing that forces them to
22:12 go and find some other interpreter or runtime like PyPy, which is really cool,
22:17 but it's just not the standard.
22:18 So you've got to have a really good reason to do that, right?
22:21 Yeah, and frankly, I'm a little disappointed that Jython didn't get a nice big boost
22:25 from Minecraft integration.
22:26 I was really hoping that was going to push it a long way along, but that doesn't seem
22:33 to have happened.
22:33 I know a few people have done it, but that could have been a lot of fun.
22:36 Yeah, yeah, too bad.
22:38 Let's talk about some of the project types and types of apps that you can build
22:43 with Visual Studio Python support.
22:45 So you guys have web apps, right?
22:47 Yeah, so a project in Visual Studio, for those who don't use it, is essentially
22:51 just a collection of files.
22:53 You can think of it as these are the files that all relate to this one project.
22:58 It's roughly equivalent to these are the ones that I check into source control
23:01 or the things that I may want to edit within Visual Studio, but a project also includes
23:06 things like launch options, debugging options, and so there's a few sort of categories
23:11 of those that we like to start with.
23:12 So web projects quite often have different launch options.
23:16 So rather than just typing Python name of the script, you'll do python-m bottle
23:21 name of the script, or python manage.py run server to get it going.
23:25 So they have different launch options.
23:27 So we provide some projects that pre-configure those effectively so that when you go
23:32 and hit F5 to start running, it's already set up for running that web project.
23:37 but the project itself is not actually that constraining and it's quite easy
23:42 to configure a regular project to be a Python project and we've actually
23:46 got some future work coming, which I think we'll talk about future work in a bit,
23:50 that we'll just get rid of projects completely.
23:52 Oh, how interesting.
23:53 Okay.
23:54 Well, that sounds really cool.
23:55 So if I have like a Flask app and it's got all of its templates, does it understand,
24:01 does Visual Studio understand like the Jinja 2 or Chameleon templates?
24:06 So we don't have Jinja 2 yet.
24:08 A while back, we invested in Django templates and have that there.
24:12 So if you're using Django and using the Django template syntax, now this is before
24:17 they offered Jinja 2 as an option, then you'll get IntelliSense within the template file,
24:22 you'll be able to debug, you can set a breakpoint in the template and it'll stop
24:26 and you can step through your template as it's being generated on your local machine.
24:30 Yeah, the debugging of the templates, that's pretty awesome because sometimes
24:33 when template binding goes wrong, you're just like, why is this not working?
24:37 It's really hard to understand like when it's handed off to the template engine,
24:41 like what's going on anymore?
24:42 So that's pretty cool.
24:43 Yeah, and definitely when things go wrong, you don't always get the nicest stack trace
24:47 out of it.
24:48 So being able to stop execution just before something gets rendered incorrectly and inspect
24:53 and see what's going on is really helpful.
24:55 Yeah, a lot of times it's kind of like there was something wrong with your template.
24:59 Yeah.
24:59 Or your data going to the template.
25:01 Sorry, because it's just the call stack of like the template parsing.
25:04 So that doesn't help.
25:05 Yeah.
25:06 Sort of generic Jinja 2 support is on our wish list of things we'd love to do.
25:10 We briefly investigated updating the stuff we have for Django to support Jinja
25:16 and it's not quite feasible yet.
25:18 Django, original style Django templates were mostly handling with regexes
25:23 because they have a more restricted format.
25:26 Jinja 2, you can't do that.
25:28 Jinja, we need like a full HTML slash Jinja parser to be able to figure out
25:33 how it all works.
25:35 So that's on our wish list.
25:37 We'd love to have it and we just haven't had a chance to get to it yet because turns out
25:41 writing a parser is a big task.
25:42 Yeah, I'm sure that it is.
25:44 So if somebody's out there listening, they're like, I could totally write that parser.
25:48 Do you guys take contributions and stuff?
25:50 Absolutely.
25:51 GitHub.com slash Microsoft slash P-T-V-S.
25:54 That's Python tools for Visual Studio and yeah, come let us know that you're interested.
25:59 We're happy to help you out and we'll accept pull requests.
26:03 We've already accepted one for our next big release.
26:05 So people who are looking for brace completion, that was contributed by an external person
26:11 who basically just came along and said, I really want this.
26:13 I'm willing to do it.
26:15 Here's the code.
26:15 What do you think?
26:16 Oh, lovely.
26:17 This episode is brought to you by OpBeat.
26:32 OpBeat is application monitoring for developers.
26:34 It's performance monitoring, error logging, release tracking, and workflow
26:38 in one simple product.
26:39 OpBeat is integrated with your code base and makes monitoring and debugging
26:42 of your production apps much faster and your code better.
26:46 OpBeat is free for an unlimited number of users and starting today, December 1st,
26:51 OpBeat is announcing that their Flask support is graduating from beta to a full commercial product.
26:56 Visit opbeat.com slash Flask to get started today.
27:08 So one thing that I saw that you guys can do, I think it's sort of special
27:13 because the deep relationship with C++ and C and Visual Studio.
27:17 Like, my first experience with Visual Studio was with Visual C++ 1.52 back in like 1994
27:24 or something.
27:25 So it's been C++ capable for quite a while.
27:27 And one of the things you can do is you can like mix mode, you called it
27:31 mix mode debugging, right?
27:32 That sounded pretty cool.
27:33 Can you talk about that?
27:34 Yeah, so it's actually one of our most popular features.
27:37 It's unique to Visual Studio.
27:39 We're not aware of any other development environment out there that can do this.
27:43 Though GDB has some extensions that get kind of close.
27:46 What it essentially is when you have Python code calling into a C module,
27:51 so one that you've written and built yourself, when we have the debugging information,
27:55 we can give you a debugging view of both the Python and the C code simultaneously.
28:00 So you can set a breakpoint in the C code.
28:03 You can set breakpoints in the Python code.
28:05 You can inspect variables in each one and see, so from the C code, oh, I've got a PyObject star.
28:11 If I hover over it and have a look, it'll show me what it would look like
28:14 as a Python object, whether, you know, a list of items or a tuple or a dictionary
28:18 and step between the two different worlds.
28:22 And so you end up with this call stack that goes Python, Python, Python,
28:25 Python, C, C, C, C, Python, Python, Python, which is amazingly helpful when you're trying
28:31 to debug native modules.
28:33 It's actually something that I had to do a lot when I first started and we didn't have this feature.
28:38 So I know how incredibly painful it is to do without having this sort of layer on top
28:43 that shows you all the actual Python values that you'd be missing otherwise.
28:47 That is super helpful.
28:48 So I guess anyone out there is listening who's writing some sort of C extension
28:52 and wants to help debugging it, you know, try the free Visual Studio version with Python tools
28:58 included.
28:58 That'd be awesome.
28:59 So you want to talk about some of the other project types?
29:02 one of the things that seems like Microsoft is up to these days, last four,
29:08 three or four years, ever since such a Nadella's taken over, I guess, is you guys seem
29:13 to be all in on Azure.
29:15 And so you could actually have support for Python and sort of deploying straight out of Visual Studio
29:19 into like a web app running on Azure, right?
29:22 Yeah, so Azure web apps, kind of the highest level, most managed platform,
29:27 I guess, for deploying websites.
29:29 It's really, really quick to just push up the code for a site to, and now you have
29:35 an active website.
29:35 So there's no setting up machines, there's no installing web servers or doing some
29:40 machine level configuration.
29:42 It is within a minute of saying, I would like a website.
29:46 You've got a website, which is really, really cool.
29:49 And so the support that we have inside Visual Studio for that just brings that down.
29:54 It's just bringing the click count down because you can do all of this through FTP
29:58 or you can do it through via a Git repository.
30:01 And then there's sort of the one click, I have my files here on my machine,
30:06 I want them on that machine, just go and do it and we'll go off and do it.
30:09 I really like the websites that you guys have in Azure.
30:12 Like if I need a little small website that I can just spin up really quick,
30:16 my first thought often is just go to Azure because there's nothing to set up.
30:20 And you can have up to 10 sites, I think, for free, like 100% free forever.
30:25 That's pretty awesome.
30:25 Yeah, I think 10's the limit there.
30:27 And I mean, if you want to try it without even signing up, then you can go to,
30:30 I think it's try.azurewebsites.net and we'll give you a free site for an hour
30:35 without any sign up, no credit cards or anything at all.
30:39 We'll just give you a site, we'll give you a Git repository and so you can push
30:42 directly to the site and have a website running.
30:46 And there's a whole lot of templates in there if you want to start from a Django
30:50 or a Bottle or a Flask site or if you're interested in doing it in PHP or Node.js,
30:55 we have like, all of the languages are supported for websites and so that
31:00 try.azurewebsites.net is just a really quick way to get a website going and see whether
31:05 it does what you want it to.
31:07 another one that I saw that I have no experience with so you'll have to tell me
31:10 a little bit about it is when I was playing with the Python projects, I saw that you have
31:16 a Windows Internet of Things core, maybe Windows core for Internet of Things,
31:19 as a Python project type.
31:21 What's that?
31:22 There's a team at Microsoft at the moment that's been working on what's known
31:26 as Windows IoT core.
31:28 It's basically a version of Windows that is really, really stripped down.
31:32 It's still sort of the latest builds of Windows but there's a lot of unnecessary things removed
31:36 and it's really designed to be run on like Raspberry Pi 2 or sort of about that scale devices
31:42 for sort of high level Internet of Things type tasks.
31:46 So it's not the little tiny microcontroller device that's just got a sensor attached to it
31:50 but something bigger where maybe you've got a running process that's going to pull down
31:54 a whole lot of data off the Internet, do some processing, display it on an attached
31:59 screen or device of some sort and that platform has a slightly different app
32:05 deployment model than on like the Raspberry Pi OS or some of the other IoT things.
32:10 So it is running Windows.
32:12 One of the big benefits of that is the security you get out of it in terms of
32:16 you can't just run unsigned code on it, you can't jump outside of the sandbox
32:20 that the code is running within and it has a lot of those benefits and what that means
32:25 is that you need to go through a couple of extra steps to deploy code to it
32:28 in the first place.
32:28 So that template is actually very different from all the other templates we have.
32:33 but it is a good starting point for IoT.
32:34 You jump into that, you get a special version of Python that we had to rebuild
32:39 so it's Python 3.5 rebuilt to run on IoT Core.
32:43 I believe something like 95% of the functionality is there.
32:47 There's a few features that had to be removed because they would not work within
32:52 the sandbox that's provided but within that you can set up a background service,
32:57 it can do network access, it can do processing and all of that will then be
33:01 easily deployed to Raspberry Pi 2 or any device, I forget the other ones that it will run on
33:07 but anything that Windows IoT Core will run on can run those Python applications
33:12 and from within Visual Studio you have sort of that one click deploy and run,
33:16 you can F5 to deploy and debug and we'll use our remote debugger to attach to it
33:21 and you'll get the full Visual Studio experience of stepping through, inspecting variables
33:26 while running on a little tiny device.
33:29 That sounds awesome.
33:30 I should check that out.
33:31 Yeah, and not to exclude the other ones, if you are working on an original
33:35 Raspberry Pi or a different OS then Visual Studio has remote debugging for Python
33:40 so it's a little module that you can put with your code on any platform on clusters
33:45 of Raspberry Pis and use Visual Studio to do their debugging by connecting to it
33:50 from their Windows machine.
33:51 That I haven't got to play with but it sounds really handy.
33:53 Awesome.
33:54 Can you give us a glimpse of maybe something that's coming that people don't know about
33:58 like a feature that's under development that's pretty cool?
34:01 Basically everything that we do that we're actually doing is going to show up
34:04 on our GitHub site so if people go and look at the commits there you can see
34:07 what's definitely coming sometime soon.
34:10 There's a lot of things that we talk about that don't always make it past
34:14 the talking stage so it's kind of hard to say from this huge list of stuff we say
34:18 yeah we'd love to do this we'd love to do this which ones will make it to the stage
34:22 of we're actually doing it.
34:23 One thing that is getting very close to that second step and is support for Visual Studio Code
34:29 so people who may not be familiar with that recently in fact about a year ago
34:34 Microsoft made the first release of Visual Studio Code which is a cross-platform
34:39 version of Visual Studio it's lighter weight it doesn't have a lot of the advanced functionality yet
34:44 but it's much more comparable to something like Sublime Text in terms of
34:49 I have a directory of code here I just need to jump around in it a bit I still want good
34:54 IntelliSense I still want the ability to navigate based off code semantics
34:59 rather than simple searching I need git integration I want F5 to debug and we're at the point
35:05 where 99% certain that we'll be committing to like really beefing up the Python support there
35:11 it has basic support for a lot of languages including Python but there's
35:16 not yet any debugging there's very limited or no IntelliSense and launching
35:21 is not quite there yet so there's a range of things to work on there's currently
35:25 a community extension that's doing it and we're thrilled to see that the community
35:29 has said hey we care enough about Python to make this happen regardless yeah that's great
35:33 do you know the name of the extension so people can search for it or I can link to it
35:37 the extension's Python so if you just X install Python from within Visual Studio Code
35:43 you'll get it it will make it difficult for us if we put out another Python extension
35:47 because we'll have to pick a different name oh yeah they really grabbed the main name
35:51 didn't they yeah they went and took it so there's always a possibility that we'll get in touch
35:55 with the guy who's created and say hey you've already got users you know
36:00 everyone already loves this one can we contribute to it and then you know
36:04 maybe we don't end up with a an official Microsoft one but we really beef up
36:09 the community owned and driven one already with with all of the stuff that we've got
36:13 from Visual Studio proper we'll try and bring that over to Visual Studio Code
36:17 and get that out there so not quite sure how that looks right now not quite sure
36:22 when it's going to be available but it's definitely something that is coming
36:25 and so there will be cross-platform Visual Studio Code Python support coming soon
36:30 yeah that's awesome it's nice to see Visual Studio Code coming along and with the whole
36:34 .NET Core stuff and I talked to Brett Cannon he was on show 49 about some of the
36:41 the pigeon work that you guys are doing involving .NET Core and cross-platform
36:45 so all those things are coming together really nicely but let's take it back to Windows
36:51 for just a second so as somebody who teaches Python I want to say thank you
36:58 for building the new Windows installer for CPython oh my god that has been
37:02 such a nightmare that to try to you know people come to class they've got some
37:07 crappy old laptop they got from their company you know it doesn't have Python on it
37:12 and they want to get started and they forgot to check the little box put this in my path
37:16 and it's just oh you know there were so many little gotchas and you recently
37:21 updated that in a pretty major way right?
37:23 yeah so what was it PyCon last year I think or might have been the year before
37:30 2014 I think the the person who was responsible for producing the builds
37:37 of CPython for Windows effectively resigned and said I've you know I've got other things
37:43 I need to step away for a bit so if someone else wants to take over then they're more
37:47 than welcome to and thinking it wouldn't be that much work I put my hand up
37:53 which turned out to be a silly thing to do but that's what I did and so since then
37:58 I've been largely responsible for excuse me for a lot of Python on Windows
38:04 one of the things that I've been really keen to do for a long time and was
38:10 kind of going to contribute it anyway was to rewrite the installer and I mean
38:16 frankly I'm still not entirely happy with where it's at but it's not something that you
38:20 can change dramatically too often but one of the big well I can tell you
38:25 it is a much nicer experience than it has been so I'm I can definitely say that
38:32 so people who have tried to like set up Python on Windows before and be like
38:36 oh here goes this thing it almost works it's a lot nicer so it may have ways to go
38:41 but it's great yeah and I did achieve two of the big things that I wanted
38:45 to do which was moving the default installation directory into somewhere
38:50 more secure because historically if you put Python in the root directory
38:54 of your system drive anyone on that machine can write to it and that then means
38:59 that someone who's not an administrative user can install whatever package
39:04 they want and then if someone who is an admin runs that Python at all they're going
39:09 to run that code that's been installed by someone who shouldn't have privileges
39:12 to install it for them so that was always a security concern for a lot of Windows
39:17 users a lot of corporations and so by moving it either into program files
39:22 or into the user's install directory that mitigates that attack vector which is
39:27 a real big improvement for a lot of people the other thing is a proper per user
39:31 install so previously if you installed Python you could say install it just
39:37 for me but you still had to be an administrator to actually install it so one of
39:41 the big big changes that I made in that installer was so if you choose that
39:46 and then you choose not to install the launcher for all users then you don't need
39:50 to be an admin at all and we'll just go ahead and install Python without ever
39:54 asking you to elevate so it's great for students who may not have full control
39:58 of their machine people working at companies where the machines are locked down
40:02 and they're not allowed to make changes to it you can still install Python
40:05 3.5 on those machines because we don't require to actually make changes to the
40:10 machine we just put all of Python into a directory that you have full access to
40:14 already yeah I've run into that problem more than once that people even though
40:20 they're professional developers at a company they're still not given enough
40:23 control of their machines to make system level changes which is kind of ridiculous
40:29 but it's great that that's all there so very cool let's talk about build
40:34 for a little bit so this is kind of like Microsoft's major developer conference
40:40 and you were there I saw you were giving some talks on Python you were kind of
40:44 spreading the good word of Python saying look I know a lot of you guys here
40:50 that guy is doing C++ you guys are all doing .NET but maybe you should consider
40:56 Python can you maybe give us your impressions of what you guys announce this
41:03 year and how did your session go build always has a lot of exciting announcements
41:08 and even for employees we don't know a lot of the stuff that's going to be
41:11 announced there so we're all watching the keynotes the same as everyone else
41:15 and seeing all the exciting stuff coming out I'm still waiting for the day
41:19 when we get to make some big Python announcements from the keynote stage
41:22 but that's probably a couple of years away still at this point but I'm hoping
41:26 for that but yeah there's definitely so much coming out I love the idea of
41:31 conversation bots I really like that idea of making so many of these interactions
41:37 more natural I definitely feel like we've gone from where 10 years ago you'd
41:43 call up a hotel to book no one does that anymore you go to a third party
41:50 website that will do the booking for you and it's gotten very impersonal
41:54 and I don't actually see that undoing completely but having the sort of conversational
42:00 option to do something like that where it can use context because it knows
42:04 about you having I guess an interactive dialogue to achieve a task as opposed
42:10 to where in step one step two step three wizard kind of format feels like
42:15 a great step into a really exciting future yeah it is pretty cool and just
42:19 to kind of take a step back for listeners who maybe didn't see the you guys
42:24 announced this thing called a bot framework which I then announced it and
42:32 said this is for C# and no JS bots and so of course the first thing
42:35 I did is went off to write a button Python did it work it did it worked great
42:39 the documentation is not quite thorough enough to make that easy for people
42:42 to do because the first step is install this library or install this library
42:47 and until we have a Python version of that library which is something that
42:50 I'm really keen to do now it's not quite trivial to get it up and going but
42:55 even without that I managed to get a bot going that you can chat with through
42:59 the framework and so then the nice thing about fitting into the framework
43:03 is you get all the connectors so it's instructions are provided for connecting
43:07 that bot up through telegram through twitter through twilio through so many
43:12 of these services that if you want to interact with it by email or by phone
43:17 call or sms you can just do that and so that's a really cool thing about
43:21 that framework is you write a bot once and then you can reference it from
43:25 all of these services that support bots in some form yeah it looks really
43:30 cool and for the data scientists out there listening the back end stuff you
43:35 guys are doing with machine learning and natural language processing there's
43:39 a lot of really cool semantic understanding of written text and stuff so
43:44 I think that was one of the really interesting ones you guys did a bunch
43:47 of open source announcements so we talked about Microsoft becoming more open
43:51 source this was absolutely evident there that was super cool to see but one
43:55 that surprised me I did not see coming at all was Ubuntu on Windows tell me
43:59 what that is I don't think anyone saw that one coming I wouldn't have been
44:03 surprised if the CEO whenever they went and told Satya hey we're going to
44:07 announce this at build if he wasn't completely shocked out of his seat no
44:10 it it really cool it is like so I've had a chat with those guys and it really
44:17 is such a nice thin layer on top of the Windows APIs that you'd never see
44:22 so it's not like Sigwin where you have a different set of libraries to build
44:26 against it's a kernel shim so everything is already built for Ubuntu and
44:32 it is literally we just copy the binaries over and every time they go to
44:35 call into the kernel that gets intercepted and rewritten into the Windows
44:39 kernel calls but it's completely transparent you don't have to rebuild anything
44:44 you don't have to change references and so when you get bash and you just
44:49 get into and start calling stuff it's all the exact same elf binaries as
44:53 you'd have on a machine that has Linux all the way through instead of being
44:58 this layer on top of Windows and the thing that really blew me away is I
45:02 didn't test this but I saw the blog post the performance is apparently right
45:05 up there with a native Linux machine which is incredible that's really awesome
45:09 so people who love their Linux tools which a lot of Python developers do
45:14 this is coming to Windows basically in a native sense right what's the timeline
45:19 did you catch that no I didn't catch the timeline but I understand it's in
45:24 the current preview releases so if you're part of the Windows Insider program
45:27 then you should either have a build with it or you'll soon be getting a build
45:32 that will let you try it out I I got the since it was coming with the anniversary
45:36 update of Windows 10 I expect that's when it'll come out but certainly there
45:41 are early builds available I've used one but I get access to the daily builds
45:45 but the insider builds are not that far behind they're typically only three to
45:49 four days behind what we have access to as employees so there should be one
45:53 out there at this point already though I haven't checked so I could be wrong
45:56 but it's very cool yeah I'll be sure to link to that in the show notes as well
46:00 all right Steve we just have a few more minutes so time for a couple of closing
46:05 questions this one is going to be a softball for you what's your favorite
46:11 Python editor Visual Studio that's awesome isn't that the answer everyone gives
46:16 yeah that's well I am trying to spread the word I think it's great what you guys
46:21 are doing there so congratulations on that and I always ask you know there's
46:25 so many packages on the Python package index on PyPI at least 75,000 last time
46:31 I checked the number there's got to be a bunch that you use that maybe people don't
46:35 know about you like you should check this out it's awesome what one's yours
46:38 that comes to mind well okay so leaving out the ones that I've written myself
46:42 because that seems a little unfair though I do like the project Oxford library
46:47 which does text-to-speech and speech recognition and natural language understanding
46:51 using what's now called the Cortana intelligence suite that's a fun little
46:55 demo one that I wrote probably and certainly if you asked all my colleagues
46:59 I talk about requests all the time and and that's largely because I keep
47:02 seeing code that's using htplib and my answer is always just use requests
47:07 please just use requests stop using anything that isn't requests so that's
47:12 almost certainly my favorite library and if you have used htplib stop using
47:17 it and use requests and you'll see why okay final call to action how do people
47:20 get started with this whole thing that you guys built so aka.ms slash
47:26 python is our sort of short link and that will get you to right now it gets
47:31 you to the visual studio page about Python support depending on when you
47:34 come back and listen to this podcast it may be pointing somewhere else but
47:37 that's always going to point to the best landing page for whatever Python
47:41 stuff is going on at Microsoft probably the second one is aka.ms slash python
47:46 blog which is our team's blog so we're posting about once a week on everything
47:52 from what are we doing at Microsoft with Python what is going on in the community
47:56 what some ways of improving your coding style and that's where you'll get
48:02 the latest news about whatever Python stuff is going on at Microsoft I set
48:05 it up the other day on my fresh new version of Windows 10 and it was no problem
48:11 nice and easy just install Visual Studio install Python tools and file new
48:16 project pick your Python flavor and go right it's very nice I'd also like
48:20 to add one more thing people out there listening who haven't checked out
48:23 what Microsoft is doing for a while you should check out the build keynotes
48:28 I'll link to them in the show notes there's some really different stuff happening
48:32 at Microsoft than 5-10 years ago yeah it's very exciting I love that we're
48:38 really getting innovating again definitely congrats on all the stuff you guys
48:42 are doing Steve it was great to have you on the show thanks for giving us
48:45 an this has been another episode of talk python to me today's guest was Steve
48:52 Dower and this episode has been sponsored by snapcii and opbeat thank you
48:56 guys for supporting the show snapcii is modern continuous integration and
49:01 delivery build test and deploy your code directly from github all in your
49:05 browser with debugging docker and parallelism included try them for free
49:09 at snap.cii slash talk python opbeat is mission control for your python web
49:16 applications keep an eye on errors, performance, profiling, and more in your Django, Flask, and even pyramid web apps.
49:21 Tell them thanks for supporting the show on Twitter where they're at opbeat.
49:25 I use both of these products on all the talk python web properties and you should check them out too.
49:29 They're really excellent. Seriously.
49:31 Are you or a colleague trying to learn python?
49:33 Have you tried boring books and videos that just cover the topic point by point?
49:38 Check out my online course python jumpstart by building 10 apps at training.talkpython.fm.
49:44 The reviews so far have been fantastic.
49:46 You can find the links from the show at talkpython.fm/episodes slash show slash 53.
49:52 And be sure to subscribe to the show.
49:54 Open your favorite podcatcher and search for Python.
49:56 We should be right at the top.
49:57 You can also find the iTunes and direct RSS feeds in the footer of the website.
50:01 Our theme music is Developers, Developers, Developers by Corey Smith, who goes by Smix.
50:06 You can hear the entire song on talkpython.fm.
50:09 This is your host, Michael Kennedy.
50:10 As always, thank you so much for listening.
50:13 I really appreciate it.
50:14 Smix, it's time to take us out of here.
50:17 It's dating with my voice.
50:19 There's no norm that I can feel within.
50:21 Haven't been sleeping.
50:22 I've been using lots of rest.
50:24 I'll pass the mic back to who rocked it best.
50:27 I'll pass the mic back to who rocked it best.
50:39 Thank you.