Brought to you by Michael and Brian - take a Talk Python course or get Brian's pytest book

Transcript #130: Python.exe now shipping with Windows 10

Return to episode page view on github
Recorded on Sunday, May 5, 2019.

00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your buds.

00:05 This is episode 130, recorded on, what is it, May 4th, 2019, live from PyCon.

00:12 I'm Michael Kennedy. And I'm Brian Okken.

00:16 I'm Emily Morehouse. And I'm Steve Della.

00:18 And it's great to have you all here. Thank you, both of you, for joining us. It's going to be a lot of fun. I know you both have some pretty cool news to share, so I'm looking forward to hearing about that and I think you know we'll go and get started with Brian's item in just a second but I also want to say thank you to Datadog they're around here they may even hear that but they're sponsoring this episode though so thanks Datadog check them out at and they track all your requests across your servers microservices and put it all together in one holistic view of your performance and errors and all sorts of stuff like that so that's super cool Brian let's start with your item. Well here at PyCon one of the booths here that I kind of had had fun with is talking with the people at PGCLI.

00:58 Hold that thought for a second.

01:00 - Brian just locked his laptop with his notes on it.

01:02 That's staying in the show.

01:04 - Okay, so my team actually, we've got a database of test data, error data that we're collecting, we're moving away from just using Jenkins, but we're pushing that all into a Postgres database.

01:16 And no matter how many times somebody tells me how to interact with the database through the GUI tools, kind of a command line person.

01:24 So I was happy to talk with one of the people at the booth about PGCLI, it's a command line interface to Postgres.

01:31 They also have a similar one for MySQL, but we're using Postgres, so I like PGCLI.

01:37 And I can't wait to get started using it, it's really fun.

01:40 It's got some syntax highlighting and like, what do you call it, IntelliSense sort of thing.

01:45 Auto-complete, yeah.

01:47 And then one of the things, it looks like a Curses interface, And I'm like, well, can I run that on Windows?

01:53 'Cause most Curse's stuff I can't run on Windows.

01:56 And they're using the prompt toolkit, the Python prompt toolkit, and that does run on Windows.

02:01 So cool, we'll be able to run it there.

02:03 That's my idea.

02:04 - Pretty awesome.

02:05 I don't do a whole lot of CLI stuff to the database, but I know a lot of people do, that's pretty cool.

02:08 How about either of you?

02:09 What's your style?

02:10 GUI or CLI?

02:11 - I switch between the two, for sure.

02:14 I'm a huge fan of DataGrip, but like anytime I'm just doing like quick creates and deletes and drops and all that stuff, I usually go CLI.

02:25 - My data work tends to start from CSV and end in Excel, and occasionally via Jupyter.

02:30 - So use the most popular database deployed on the earth, Excel.

02:35 - Yeah, Excel is my database.

02:35 - Yeah, that one tends towards the gooey side, but that's pretty awesome.

02:39 All right, let's see, I guess I'll go with my next.

02:40 The one that I thought was cool was a recommendation from one of the folks here at the conference.

02:45 It's called Paper Mill.

02:47 And I know, Steve, you've heard of Paper Mill, right?

02:46 - Yeah, I've had a little play with it, but I think you've probably dealt more justice talking about it than I have.

02:50 - Yeah, I definitely, I've learned a little bit, thanks to John Lamb and some other folks.

02:53 So, Paper Mill is a way to take Jupyter notebooks, and I'm sure you all are familiar with Jupyter notebooks, and it's just such a different way of programming, right?

03:01 You go in there, you load up your data, you kind of explore it, you iterate on it, but what it typically doesn't do is, it doesn't typically get called and then return a value.

03:10 Right, it's like this thing you load up, you look at it, and you go, okay, well, that's cool, that must be the answer, or that's the picture it makes or whatever.

03:16 Well, with Paper Mill, you can turn Jupyter Notebooks into basically functions and command line arguments that you can run, and you can actually chain them together, like this notebook then calls on that notebook and then saves it, and it does really cool stuff.

03:30 So, apparently folks at Netflix are doing really interesting things to run a bunch of ETL, egress transform load, that type of stuff.

03:39 They run 18,000 of those a day through Paper Mill and other stuff.

03:45 And apparently what's really cool about Paper Mill is if it crashes or doesn't work, you get like a whole graph of Jupyter Notebooks that you can go open up and like, instead of just having a log entry or some kind of error in like an exception trace or something, what you get is actually the notebook with all the stuff that notebooks have explaining what it was doing before it died.

04:06 If you do anything with notebooks, that sounds like super cool.

04:08 People should check that out for sure.

04:10 - The workflow is actually a really useful thing.

04:11 I'm aware of a couple of teams within Microsoft where I work that have, I don't think they're all using Paper Mill.

04:18 Some of them maybe, we don't actually have that much, we don't tightly control everyone's workflow so they get to use what works for them.

04:24 But there's certainly some teams that have services set up where people using them are gonna send in a query or they're gonna do something and occasionally there's cases that are not really failures but they seem weird.

04:35 It's kind of like if you go to a search engine and you type in something that gets no results.

04:39 What do you do then?

04:40 You haven't necessarily failed, but you probably want someone to look into that and figure out what it does.

04:45 So I know that we have some teams with a similar kind of thing to what Paper Mill can do.

04:48 It will generate a notebook to do this side of that analysis.

04:51 Or there's some cases, some of the security teams that we have, the security research teams have templates for analyzing malware that's come in.

04:59 And that's the kind of thing that you can use Paper Mill to auto generate maybe a half complete notebook with the inputs that you already know and then pass it off to an analyst to work through and put them in a comfortable environment that they want to work in, which is Jupyter, and give them the tools but have all of the information already there so they're not spending a lot of time loading it up and collecting URLs and copy-pasting from all of the different things.

05:21 - Yeah, that sounds awesome.

05:23 The way it works is basically you define a cell with default input arguments, and then there's a cell below it that are all the parameters passed.

05:30 Emily, do you guys do anything with notebooks?

05:32 - Not a whole lot, really.

05:33 I have a couple of internal tools.

05:35 We operate at a very different scale, So we are a company of like six people right now, but I use notebooks for a lot of internal tools and like budgeting and forecasting and whatnot.

05:44 - All right, awesome, yeah.

05:45 Well, Paper Mill, check it out if that resonates with you guys.

05:48 All right, which one do you wanna do your item next?

05:49 - All right, I'll go next.

05:50 So I wanted to talk a little bit about one of my favorite events that I get to participate in at PyCon, and that is the Python Language Summit.

05:59 This is my third year attending, and it's really, really interesting to get to see kind of a lot of the inner workings and discussions that go on.

06:08 So one of my favorite things, this year the language summit was run by a few new people to organize it.

06:14 And Marietta and Lukasz Langa took a little bit of a different direction on it.

06:20 And we got a lot more community involvement.

06:23 So we got to hear from projects like CircuitPython and Beware, and really just got a lot of new voices into the core development community.

06:32 And I think that that is something that is really gonna help us moving forward, finding out not only what we need internally to continue the development of CPython, but also what needs to happen to do things like supporting Beware, which hopefully if you attended his keynote or you can go back and listen to the video, Russell Keating's keynote talks a bit about this.

06:52 And so really just this true cohesion of different groups coming together, and I'm very excited about that.

06:57 - Yeah, and this is the first year that you had the language summit after Guido stepped down, right?

07:03 so this is the first sort of independent one.

07:06 I know that he was there, but it probably was a little different.

07:09 - I don't know, I didn't feel any differently, did you?

07:11 - No, I feel like it was, definitely having more community involvement means we were getting a lot more opinions from outside the core development team, and I think that's gonna be really beneficial as we look towards Python 3.8 is approaching its feature freeze, but 3.9 planning's already starting.

07:26 We've got a few peps that people have been working on towards that.

07:30 But having had those extra voices come in and call out some of the pain point.

07:34 And putting a face to it as well is such a big deal.

07:37 So much of the feedback that we get to hear, that you always get to hear about software, is a GitHub issue, and it's just text, and it's a made up name, and an image that's generated from an IP address, and there's no person there.

07:50 And how much pain is this?

07:52 We don't know how much pain this is.

07:53 And when someone takes the trouble to get to a conference two days before it starts, and prepare a talk, and come and spend half an hour talking face to face with people, It has a very different impact and you get a lot more information and you get the follow up.

08:06 And so there are a lot of chats after some of the talks where some of us heard the things and were like, I thought that was a problem.

08:14 And now you're telling me it is.

08:16 Let's dig into that.

08:17 Like, tell me more about what we can do to help this.

08:20 So I think for 3.9 planning, we're going to get a lot of benefit out of the way this one was run.

08:24 Yeah, that's super cool.

08:25 And of course the high bandwidth in-person conversations has got to be better than, oh, I put up a GitHub issue or I put up a pep.

08:31 and go read it, whatever, right?

08:33 Like being there in person has got to help.

08:35 - Yeah, absolutely.

08:36 And that's one of the best things about PyCon.

08:37 Those conversations haven't stopped.

08:39 I walked away from some of those conversations to come to the podcast right now.

08:43 And probably-- - We're on pause.

08:44 - Looking at the people around here, I might make it three or four meters before we start another one.

08:48 - That's right, that's right.

08:50 Speaking of three or four meters, I just want to say thank you to Logan for the paper mill recommendation.

08:54 He was the one who got that one on the show, so thank you.

08:56 (audience cheers)

08:58 Yeah, right on.

08:59 All right, Steve, sometimes you say you saved the best for last.

09:02 I, I know that a lot of people are going to be excited about what you're offering here and you sort of wear two hats in the Python world, right?

09:09 Like you wear the core dev hat and you wear the Microsoft hat and, you couldn't get it talk about them both right now, right?

09:15 Yeah.

09:15 And chatting with a few other people, we need to get physical hats for some of this, because sometimes it's a little unclear which hat I'm wearing in any particular, yeah, the Sherlock hat with Python on the front, Microsoft on the back could be fun.

09:25 Those who saw my brief little chat this morning from, from the stage will know that was very much the Microsoft hat.

09:30 But one of the projects I've been doing for a while for CPython itself has kind of been both hats at the same time.

09:36 So when Windows 8 came out, we added an app store, or Microsoft added an app store as part of Windows, and that's continued on.

09:42 So there's an app store for getting apps for Windows 10.

09:46 And that's always kind of been slightly different from downloading an installer and double clicking it and next, next, next, next, next, agree, next.

09:52 It's been meant to be a lot faster, a lot simpler to get installations, a lot more reliable, a lot more isolated.

09:59 And generally you start doing that by making it highly restricted.

10:02 And so when that first came out, one of my first projects at Microsoft was, how do we get Python into this thing?

10:06 And it turns out the answer was, no, can't do it, impossible.

10:09 Fast forward a few years and those things kind of get relaxed over time.

10:12 And we've reached the point recently where it totally became feasible to put Python in the Windows App Store.

10:18 And so we did.

10:19 And so as of Python 3.7.2, that was kind of a preview.

10:22 3.7.3 is considerably more reliable and Python 3.8 is going to be better again when that comes out.

10:28 You've been able to go to a Windows 10 machine, open up the store, type in Python, and install Python that way.

10:34 - And those apps auto-update?

10:35 Will this auto-update? - And it auto-updates, yeah.

10:37 So it'll stick within the major version, so if you get the 3.7 app, sometime when we push out the next version of it, when you're not using it, it's just gonna quietly update in the background.

10:47 And so next time you go back to it, you'll automatically have 3.7.3 or 3.7.4.

10:50 I actually get some really nice controls.

10:52 I can do a gradual rollout on that, so I can set the slider and say, automatically update this many percentage of people, which is fun.

10:59 But it's not going to take you straight to 3.8 without warning.

11:02 That's going to cause you to take another step, go back through the store, pick the new one.

11:05 But the other half of that project while I was working on that was kind of still like secret within Microsoft.

11:11 And we knew that we were doing it, we knew that it was going to happen, but until it was actually out there, we haven't been able to talk about it.

11:18 Now at this point it's out there.

11:19 So some people are already saying that if they're running Windows Insider builds, because they've got the latest update already.

11:24 That update is coming out in the next month or two.

11:27 When that hits, every single Windows machine is going to have Python on it.

11:31 So if you go to a clean...

11:34 Which means if you go to a clean Windows machine and type Python, previously you get a big fat error message.

11:39 What you're going to get now is a pop-up straight to the page in the Windows store with the latest released version of Python, which means you're now one click away from installing it.

11:49 I actually demoed this at the Language Summit, so Emily can confirm that within a three minute lightning talk, I went and installed Python and had it running. The feedback I've been hearing so far is people forget they even clicked install and they're like, I typed Python and it was just there by magic. And I'm really excited to just take out so many of those steps on where do I go to get Python? How do I get started? I've talked with some of the teachers and the trainers who instruct people on Python. They're really excited because now you can go to any machine that people bring in and type Python and it's either going to work or it's going to put them one click away from it working.

12:25 I really love this.

12:26 I actually, well part of my job is to monitoring the test environment within our company and our area, but trying to get people to just install Python for that, even that, for some reason some people get it messed up, somehow they install it in the wrong place and it's just a mess.

12:42 So I'm really happy about this.

12:43 This is great.

12:44 I know Windows has a lot of enterprise controls and group policies and stuff that I haven't thought about for a real long time, but it seems like they could be used for good.

12:54 Can Windows Stores apps be set up company-wide?

12:59 So could this just be automatic on the machines at large companies?

13:02 - I am not personally familiar.

13:05 I probably need to get familiar, 'cause this question's gonna come up again and again with how to roll out-- - Now that we just published it to the world, yeah?

13:10 - Yeah, with how to roll out this app to a whole lot of people.

13:13 One thing I can say, you don't have to be an administrator to install it, but when you do, it still installs it as if you're an administrator.

13:20 So it's going to have a lockdown secured install.

13:22 No one's going to modify it on you.

13:24 So you have like a secured Python install like that, even though you weren't an administrator to do it, which is really neat thing about the store apps.

13:30 I almost certainly can roll it out, but again, it's very few places that I'm aware of are restricting apps from the store because those who've gone through a Microsoft review process we've checked them out and they're basically safe.

13:43 - Right, they're super isolated, so that helps a lot.

13:45 - There's two words?

13:46 - They're super isolated.

13:47 - Super isolated, yeah, which does lead to some bugs, and some people have noticed this.

13:51 It's like if you write to the temp directory from this, it actually goes to a private one.

13:55 On the bright side, if you uninstall it, it gets rid of everything that it did.

13:57 - That's cool, and as somebody who writes courses, and if you write a book, it's always, here's what you type to activate a virtual environment or run this script on macOS and Linux, but you don't do that in Windows.

14:10 You say Python without the three, and then you gotta make sure the path is right and you check it.

14:14 So that's the other good thing, right?

14:16 Is I can now do Python 3 on Windows.

14:18 - Yeah, so this is the first time we've actually done this in Python on Windows, but when it comes, it'll automatically go into path by default.

14:25 And it comes with a Python shortcut, a Python 3 shortcut, and a Python 3.7 shortcut.

14:30 It also includes the same for pip and idle.

14:33 So you can, when you install this, and in fact, right now, until we fix it in probably 3.8, you're better to just type pip install after using the Windows Store package, then you are doing the Python-M pip install.

14:44 - That's awesome.

14:45 Such good news, I'm really glad.

14:46 I've wanted this for a long time.

14:48 I remember on UserVoice, I had posted something like that requesting Python 3 and Windows, and it got like thousands of upvotes and comments, and it was just like kind of crickets.

14:57 - Yeah. - You know?

14:58 - It takes some time, but we do read those UserVoice.

15:01 - That's awesome, and I'm really happy that you got this.

15:03 I mean, the impact this is gonna have is gonna be huge, just 'cause the number of Python developers on Windows, outnumbers any other platform, right?

15:11 - Yeah, and it's going to be too late for the people that are listening to this on the recording, but for everyone here live, I'm actually, I've got my talk tomorrow afternoon, which is on this topic, Python on Windows is okay, actually.

15:22 For those who are listening, you'll be able to find this online.

15:24 That's one of my first points, is everyone's always surprised by just how much Python is being used on Windows, because particularly for those of us at PyCon, we look around and we get a very different idea of where people are using Python, because virtually everyone has a laptop with some shiny fruit on the back.

15:40 And that's just not actually the case for everyone who's using Python out there.

15:45 - That's conference reality, not reality reality.

15:47 - That's absolutely conference reality.

15:49 I joke that I'm the only person in the room with a Windows PC, and far too often it's not enough of a joke.

15:54 - Yeah, that's for sure.

15:55 All right, well, thank you for sharing that and announcing that to everyone here.

15:58 That's super cool.

15:59 So I guess let's close out the show with just maybe your main takeaway from the conference.

16:04 So I'm gonna start with you, Emily.

16:06 (laughter)

16:08 - Oh gosh.

16:09 - Your conference experience this year compared to last, something like that.

16:13 - Oh yeah, so I think that this is a very unfair question to ask of me because my conference experience this year is very different because I'm co-chairing this year.

16:20 - Congratulations, that is so awesome.

16:22 - So this year is like, thank you.

16:23 (applause)

16:25 This year is very much like running around like checking with my head cut off.

16:28 - It feels like work.

16:29 - I'm surprised that I'm sitting for this long.

16:31 But it's really, really incredible.

16:33 I'm very, very grateful to be able to give back the community in a different way and continue to be the voice of the community as PyCon grows throughout the years.

16:40 Awesome.

16:41 Well, congratulations and I'm looking forward to next year when you're even more involved in the conference.

16:46 Yeah, Pittsburgh 2020.

16:47 Right on.

16:48 And congratulations having your business on Python doing so well.

16:50 So it's great to see everything going so great.

16:52 You bet, Steve.

16:53 Yeah.

16:54 So, well, and again, this is very much a running around like crazy conference.

16:57 Microsoft is Keystone's sponsor.

16:58 We have a big booth.

16:59 We have a lot going on and I've been helping run some of that.

17:02 So my experience has been a lot of people actually coming up saying, "Oh, I've heard about some of your stuff.

17:08 I've been trying to use it and I've been struggling.

17:10 Like I've been hitting problems.

17:11 I'm getting stuck in some places.

17:12 Are you able to help?" And one of the things we came prepared to do, which I was keen to do and help drive through a lot of the planning, was actually bringing some of our engineers solely for the purpose of helping people get their stuff working.

17:25 And so we've had a table set up.

17:26 We've had people coming up with their own laptops and helping them get whatever it is they're trying to do working. We've had migrating people to Azure pipelines, getting people to deploy stuff on Azure, setting up VS Code, a whole lot of things.

17:38 And so it's been a lot of experiences of people being frustrated at the start and walking away very satisfied and very happy to, to have come and actually met, you know, a human from Microsoft who can help them with their computer.

17:51 Well, so a couple of years ago was the first time the, the second Portland one, I couldn't get tickets to the first Portland one, even though I live there.

18:00 But that was my first PyCon, and since then, the last two years, Michael and I have been spending a lot of our time in a community contributors booth.

18:09 And this year, I'm very grateful for PyCharm for including us in their larger booth, and then also, we've split up the time.

18:17 We have more community contributors, so we're not standing in the booth the entire time.

18:21 We really got to enjoy the conference, and I'm really grateful for that, and it's been an incredible experience, so thanks.

18:27 Yeah, thanks for this theater and this opportunity again.

18:30 That was awesome.

18:31 And my takeaway is really, you know, kind of like before I said, just the people, right?

18:35 Like I get to meet so many people and you hear these stories like, you changed my life in this way.

18:40 And like what I was doing didn't feel like anything like that.

18:43 I was just kind of like chatting, you know, playing around, but actually the community is great and we do a lot of things for each other and it's just wonderful.

18:49 So it's great to see you all and, you know, be part of it and share the stage with you guys.

18:53 So thanks all for coming in.

18:55 - Are we going to take questions?

18:56 - Let's go ahead and take questions.

18:56 We'll take two questions if you guys have any questions.

18:58 Yeah, Paul's got one.

19:00 - Coast Pole has one.

19:01 - A question and a half for Emily.

19:03 - Half question, I heard there's some event in Colorado you might want to talk about?

19:06 - Sure, yes, Pi Colorado 2019.

19:11 It's gonna be the weekend of September 7th and 8th, I believe, it's that Saturday and Sunday.

19:16 Inaugural Python conference in Colorado.

19:19 Come for the Python, stay for the mountains.

19:22 (laughing)

19:23 - Yes, mountains please.

19:25 Okay, so the actual question, your reward for becoming a contributor was to take on the most controversial task in the last 14 decades of Python.

19:34 - Yes.

19:35 - Now that it's merged, looking back on it, was the process easier or harder than expected?

19:42 - To actually implement it?

19:43 So I don't think that this is a very fair question because I had spent approximately a year and a half plus really just diving into the code that I was gonna need to work on.

19:53 So I had been figuring out how the parser worked, how the grammar was defined, how all of the symbol table lookups and everything were working.

20:00 So I think that it was a lot easier to implement than I expected, only because I had all of this knowledge.

20:06 And so it was very rewarding for me to be able to take that year and a half plus of time that I had spent learning and just be able to apply it to something real.

20:14 And then there are definitely a couple of tricky bits about how scoping works with assignment expressions.

20:19 So that part was really fun to figure out and was more challenging, but definitely a good balance of getting it 90% of the way there and then really having to figure out the tricky bits.

20:29 - What are you planning to work on at the sprints, Emily?

20:31 - Well, I'm actually gonna write a bunch of documentation, which is everyone's favorite part.

20:36 I wanna highlight some of the tricky bits about scoping that I think might trip some people up, but then I'm also really interested in kind of diving into some of the discussions around improving Python's I'm swapping that out for something a bit more modern.

20:51 - Follow up, is the new feature tested?

20:55 - Tested, yes.

20:56 (laughing)

20:59 I actually used legitimate test driven development for the wallet operator.

21:04 (applauding)

21:06 - Yeah, yeah, we got one more question out there someone wants to ask.

21:11 If not, you're gonna make me tell a Python joke or a programming joke.

21:15 Now normally, oh yeah, go ahead Ricky.

21:17 Right, so the question, and I'm gonna skip some of the context unfortunately, but for with Python coming in through the Windows Store and auto-updating from version to version, what about all the people that need to run multiple versions?

21:29 And there's a lot of really good reasons to have multiple versions of Python around.

21:32 It's actually a scenario that works really well on Windows, and that's something that I'm really careful to not break, or at least I'm trying to be really careful to not break it.

21:41 Obviously one of the main scenarios is testing.

21:42 If you're gonna write library code to share with people, then you need to make sure it works on at least the two latest versions, probably three and also 2.7 depending on who your users are.

21:53 And so that's something that is my hope is to not let that go away.

21:57 This is still kind of experimental phase, so I'm not going to definitively say that nothing will break completely.

22:04 But one thing I will say is that the original installers are not going away.

22:07 And so just because you can get Python through the store, there's going to be a number of situations where it may make more sense to get it through the regular installer.

22:15 And one of those is I don't want to ever auto-update or I want to know that this is exactly 3.7.1 for some reason, even though that's a few versions behind.

22:25 Occasionally there's a legitimate need for that.

22:27 The other thing is the store version is actually only 64-bit.

22:31 And so there's some cases where you'll want a 32-bit version still.

22:33 I've actually had people coming up to me saying I'm still running 32-bit Windows.

22:37 And I'm like, I didn't realize you could still get that, but apparently you can.

22:41 You won't be able to get it from the store, unfortunately.

22:43 you'll have to get the regular installers still.

22:45 - Yeah, it's pretty cool.

22:46 All right, well I guess I'll try to remember the joke that I heard earlier.

22:51 Since I can't type, normally what we do, it's pretty amazing, Brian and I, we type pie joke in the terminal and then we take our favorite one out of there.

22:59 But it's back there.

23:00 So if a functional programmer were to get a pet or a lambda, a pet or a, I already blew it.

23:10 If a functional programmer were to get an animal, a pet, what would they get?

23:14 They'd get a lamb, duh, sorry.

23:17 See, I need this terminal.

23:20 Dude, Brian, save me, man.

23:22 Type it, PyJoke, baby.

23:24 - Friends don't let friends use Python 2.7.

23:26 - Yeah, right on.

23:28 (audience applauds)

23:31 All right, well, thank you all for coming out.

23:32 It's really fun, and thanks for listening, and thank you guys for being here.

23:36 It's been great.

23:37 You're welcome.

23:38 (applause)

23:40 Thank you for listening to Python Bytes.

23:44 Follow the show on Twitter via @PythonBytes, that's Python Bytes as in B-Y-T-E-S.

23:50 And get the full show notes at

23:53 If you have a news item you want featured, just visit and send it our way.

23:57 We're always on the lookout for sharing something cool.

24:00 On behalf of myself and Brian Okken, this is Michael Kennedy.

24:03 Thank you for listening and sharing this podcast with your friends and colleagues.

Back to show page