Learn Python with Talk Python's 270 hours of courses

#53: Python in Visual Studio Transcript

Recorded on Monday, Apr 4, 2016.

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.

Back to show page
Talk Python's Mastodon Michael Kennedy's Mastodon