Get the Best Python Books for Free

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
- Data is pretty much the worst variable name that you can name your variables. Though, what does this variable contain? It contains data, sort of like if you were moving houses and you just labeled all of your moving boxes as stuff. (upbeat music) - Hey everyone, it's David Bumble back with a very, very special guest. He's the author of this book as well as a whole range of other books. And I'm really excited to have him Al welcome. - Hello, thanks for having me. - So this book is like really famous and it's a fantastic book, but this is not the only book you've written and it's not your first book. Do you wanna give us a bit of a history of how you got into writing this and the books that you perhaps wrote before this? 'Cause it's quite a cool story. - Yeah. So about, I think around 2008 or 2009, my girlfriend at the time was a nanny for this 10 year old who wanted to learn how to code. And I thought, yeah, sure. Okay. I can find some tutorials online, but didn't really find anything that just sort of presented the source code to some little video games or things like that. That's sort of how I learned how to program was finding these, like listings in the basic programming language of guess the number game and that sort of thing. And a lot of things seem to either be just for computer science majors or advanced experienced professionals, or they're more just sort of like, here's how computers work and here's a monitor and here's a keyboard and- (bell sound) And that sort of low level things that you don't really... That's not too helpful. And so I thought, well, I don't know. I guess I could start writing up a tutorial and that small tutorial kept growing and growing in size. And so I put it on a website and it started getting some traction and I decided to go the self-publishing route. And it's sort of amazing that once it was an item that you could buy off of Amazon, people started calling me an author, which I didn't really think of myself as at the time I was just yet another software engineer. I had started writing up these materials and people like that book that was "Invent Your Own Computer Games With Python". And so I wrote a second book that became "Making Games with Python & Pygame". I wrote a third book, which later became "Cracking Codes With Python". And so at this point, this was about 2014 or 2013. I approached No Starch Press with an idea about creating, "Automate The Boring Stuff with Python". And I had noticed that there's a lot of people out there who don't necessarily want to become software engineers, but they have an office job, they're dealing with Microsoft Excel all day. They have a lot of just mindless clicking and typing that they have to do and they would tell me these stories. And I thought, well, if you knew a little bit about programming, you could then write your own script to automate this because it would be something very personal for their own workflow or how their organization is set up. So there's no commercial software to do this. And at the same time, it's such a small task. You don't wanna hire a consultant to write this software for you. And it just became... - Sorry to interrupt you, you've got a really cool story. You've gotta tell us that story. I heard it on another podcast where someone used your book, I think it was, and then they had a very long lunch. Can you explain that. - Oh yes. So this is the story I have in the intro of automate. This is my roommate in college who was telling me this story about how he worked at this one retailer about every year or every quarter maybe, they would get just a huge printout, just a stack of paper about all the prices. I think it was either for their competitors or something. Somehow they had gotten this information and one by one, they would have to look up a price on this big stack of paper, type it into their store database. And then they would just wanna make sure that their store's price was at or under the price of their competitors. And this would take a team of three people, like a couple days to do, just to go through the entire thing. And so my roommate who was working there at the time, saw them just in this conference room, just going through all this paper. And he said, "Well, if you have the original data from that printout, I could write a script that could then just automatically do the database lookups itself." And, it took him about a couple hours to write this program. And then when he ran the program, it took about two seconds to run. And all of his friends or all of his coworkers just said, "Wow, you've just saved us two hour, oh, two days of work." And so I don't think they actually told their manager that they had finished early. They just totally took a very extra long lunch at the end of that. (laughs) - So the, the main book that you've got is the cipher book on that's an ethical or hacking focus. Have you done anything else? Like not perhaps in a book, but have you like any other examples and ideas that you can share or perhaps another book using Python to hack or something? - Oh yeah. So my personal history was, I was a teenage wannabe hacker, but I didn't have any information at all. And I had some friends who were hackers, but then looking back on it, I realized actually, they didn't know anything. They just made up most of their claims. I realized like... I was like, oh, what they were describing is actually impossible. And I think they just made it up, but I always had that interest in computer security. It's just that I sort of took the path into software development afterwards and then later book writing, but it is something that I was interested in. And so the closest thing that I have is "Cracking Codes with Python", which just goes into breaking those classic ciphers and security is also just a very wide field. Encryption and cryptography is a small part of it. And then if you want to go down that path, you'll have to learn a lot of mathematics as well. If you want to go into the creation of ciphers and crypto analysis and that sort of thing, but- - You didn't go to jail, is that right? You didn't get into trouble. Sorry. You didn't go to jail or get into trouble for hacking did you? - My lawyer has advised me not to answer that question. (David laughs) - I'm a really good Lawyer. (both laughs) - [David] I love it. - Yeah. I'm not gonna go into that at all. (both laughs) I mean, in the nineties, it was also just sort of hacking was also seen as more of a prank. I mean, infamously the Morris worm, a very early self propagating program that ended up crashing a lot of systems that was written by Robert Morris, just as an experiment more than anything that just quickly got out of control. But these days it's not as funny and simple as a prank because we have... Well, just computers are so much more relevant to our lives. And we have viruses that send out spam emails. We have crypto locker programs, we have issues with stalking and doxxing people. And so the need for security is much more heightened. And again a lot of these scams that work online, they're just so much more relevant to our lives. And so that is a very serious topic. And I also have this written in "Automate the Boring Stuff," because especially with GUI automation, if you can write a Python program that controls the mouse and keyboard. Well, you can then use it to just sign up for a million different free email accounts and then use those to harass people. And I write up that, it's a lot of the hacker folks that I know, there is this tendency to think, well, as long as I'm being clever, I'm not doing something that's wrong. And it is this immaturity of not wanting to acknowledge that you can do harm and that you are doing harm. And it's like, well, I hacked into my friend's email address, but they don't know I did. So it's fine. And it's like, that's like, are you their friend if you're doing things like that? And it's really easy to get excited about this power and capability that you can do that you really do need to stop yourself and say, Al, I don't know, is this ethical? I mean, is it even ethical to write a program that just refreshes the webpage over and over again so that I can buy tickets and get ahead of everybody else in line? And these are questions where, just because you can do something, does that mean you should do it? - Yeah, I'll say this on the channel. I only advocate ethical hacking. - Yeah, right. - Not that stuff. - Yeah because people being knowledgeable about security, there's a great demand for that because of this. And so we do need people who are security professionals who can keep our systems secure because not everybody has time to learn about, oh, well you should have used such and such encryption program. Because clearly version two of this doesn't work and blah, And all this detailed knowledge that... People have other things that they're doing, not everyone can become a security consultant. - That's so great. I mean, sorry, I interrupted your flow. You were talk telling us the history of the books. Sorry. - So "Automate The Boring Stuff". I started writing that and 'cause I had all these stories of people who are not software engineers, who are not computer science majors. And they kind of asked me well, I don't know what would I need to know? And I thought, well, Python is great because Python has such a gentle learning curve. I started looking at how people learn to program today and I realized it is so much easier to program today. The expectations are really high because when we think of programming, we think of AI and self-driving cars and social media websites with millions of users. But actually programming today is way easier than it was in the nineties or eighties. Just because the language is easier. The tools make it easier. There's so much more documentation and help. And so I started compiling the list of, well, okay, what do non-software engineers need to learn? What is the programming for office workers? What are those topics that they need to have? And so, I came up with a list and that sort of became "Automate The Boring Stuff With Python", which is a title that I remember throwing a whole bunch of words together and thinking, well, it's needs to have Python in it. It needs to have automate in it. And what am I showing people how to do? Because I didn't wanna just have like, oh, programming for beginners in Python or something like- - [David] Yeah it's a very boring. Yeah. - Yeah. And there's just so much boring stuff that you don't wanna do. - Exactly. And this is why we have computers to make our lives easier. Even though oftentimes computers make our lives more difficult. But yeah, this all came together into this book. And I remember I looked into my diary entry while I was writing this book. And I had some day where I said, I have no idea if this book is going to be popular at all. I've spent a year writing this. I left my job as a software engineer because I sort of wanted to switch companies at that point anyways. So I thought okay, I'll just take a year off, finish writing this book and then get another software developer job. And the book really took off. And so now I've been writing books pretty much ever since what? 2013. - Before we get into more details about the book, what I really like about what you're doing amongst many things, you are not putting the books behind a pay wall. Is that right? - That's right so all of my books are released under a Creative Commons license. So you can download them for free at inventwithpython.com. You can also make derivative works from it as long as you use it non commercially, and also release that under a similar license. Yeah. A lot of people are surprised that people will still buy a book that is freely available online. And including me, I'm completely surprised that people do that. - Well look at my bookshelf, looks great. (both laugh) - Yeah. People still do like actually having a nice printed book, but definitely more than that, I think it turned out to be a good business decision, even though it wasn't really a decision at all, but because it was freely available online, people could actually find it and then read through it. And that generated the word of mouth to make it really popular. - Yeah, I mean, it's amazing. I love it. That's what I love about YouTube and other like platforms. And I wanna mention your YouTube channel because I just looked at your subs. You're just under a 100,000. So everyone who's watching, please go and subscribe, we'll put the channel below. Let's show some love. Al, you're not just giving your books away for free, but you've also got videos. Is that right? So it's on your YouTube channel and it's on other platforms, is that correct? - That's right, so I created a course, an online video course that follows "Automate The Boring Stuff with Python". The book still has more information. Originally I thought, well, I could just create this course to help promote the book. But a lot of people seem to really like the online course as well, every month at the beginning of each month, I release free coupon codes to get free signups as many as Udemy will allow me to put out there. - Yeah. So the course is on Udemy, yeah? - Yes. Yeah, so I have the first 15 videos of the 50 video course on my YouTube channel. And then you can also check out Udemy as well for the full course. It covers all the same concepts that I have in the book. But I figured that a lot of people would much rather just actually see somebody typing the actual code into it. There's this huge disconnect that some people find hard to read code in the page and think, okay, I'm going to put this into my computer and then it will work. But then people are sort of intimidated of am I doing this right? I have no idea, but seeing somebody else type it into IDLE or the interactive shell really sort of, I don't know, makes it just that much more real of like, oh, this is a person doing this. I can do this. - [David] Yeah, exactly. - Yeah and I think late last year is when I passed 1 million registrations- - [David] Congrats. - On the online course. Thank you. - That's huge... It's a huge accomplishment. And it speaks volumes to the fact that I think if you give away a lot, like you said, it was a business decision to give away stuff. It hasn't affected you, in some ways it's helped you. Is that right? - Yes. I really recommend that more people do this it's... Well, it's actually really hard. I tell people, ignore all the advice I give about writing books or creating online courses, because it's sort of like asking a lottery winner, what numbers they picked. All of this seemed to work out for me. And I'm not really sure how much of that is luck and how much of that is hard work. Of course it's both, but some days I tend to think that, well, I got pretty lucky with putting my work out there and having it get noticed. And it's definitely been a very wild ride. I really thought that I would be a software engineer at some generic Silicon valley tech company here in 2022, I really could not have predicted all of this. - I mean, you're very humble. I mean, and that's what's also amazing. And it's fantastic because I mean this book wouldn't have done well, if it didn't get good reviews and the reviews on Amazon are amazing. - Yeah. I've- - So kudos to you. Sorry, go. - I've always thought that the secret to that was that I really strive to try to remember what it's like to be a beginner. And I have huge blind spots about that as well, but I think there's just a lot of software nerds who have learned so many cool techniques and so many awesome tools and other sophisticated things. And it's really exciting to have all that knowledge. And then when you try to teach it to other people, you immediately want to just plunge them into the deep end. - [David] Yep, exactly. - Which is utterly terrifying for a lot of people. I find that actually teaching children how to program is much easier than teaching adults, because children don't think of programming as something that you have to be really smart or super genius to understand. And clearly with the amount of mistakes that I make, even after over 20 years of experience writing software, I'm still forgetting semicolons and getting small syntax errors and wondering why my program doesn't work. And then three hours later I realized, oh, because I wrote the code incorrectly and it's doing exactly what I'm telling it to do. - I mean, it's great to hear that from someone like you. And I think it's an encouragement for everyone who's starting out. So let's talk about what... I think you've called it gateway drugs into programming. There's specific topics that you sort of hone in on. So let's talk about those. - Yeah. So the way that I got into programming was that my parents bought my sister and I an 8-bit Nintendo. This is very much dating myself, but... So I really loved Mario and Zelda. And I thought like, oh that'd be really cool. And I was very fortunate that my family had a PC in the house growing up. This is of course, lots of programmers love telling you this story. It's like, oh, I had a Commodor 64. And it only had two kilobytes of memory and whatever, had to use a magnetized needle to set the hard drive flatters to everything. (David laughs) All of those stories. Anyway. Yes. I had a computer and I found a book in the library that went into programming small games in basic. And I thought like, okay, this is kind of cool. And I read through it and I didn't really understand most of it, but I could copy the source code and then start making little changes. And I really hate telling this story of how I learned a program because- - I knew you... I've got it on my question, here. I know you hate this question, but how old were you when you started to code? So I'm sorry to put you that spot, but go on. - So I think maybe in the third grade or so about seven or eight years old, and that's when I started like started to program, I'm doing air quotes a lot in this interview because there's so many things that are not straightforward about my path into programming. And I feel that a lot of people are really intimidated because they hear stories like mine and think like, well, okay. I didn't learn to program as a kid and I didn't have a computer in the house when I was growing up and, oh God, I'm so old. I'm already 23. Is it too late for me to become a software developer? And... - I hear that a lot. Yeah. Yeah. I'm 23. You dunno how old I am. That's- - Oh yeah. (laughs) But yeah. And so the one thing that I wanna make clear to people, and I have this in the introduction of "Automate The Boring Stuff with Python" is that basically everything that I learned about programming from elementary school to graduating high school, anyone could learn that in, I don't know, maybe a couple dozen weekends, it wasn't that much. It was mostly that I had a lot of time to just mess around with little programs. I wasn't really thinking of it as I need to create a career and build up. And there's all these different frameworks that I need to learn and I need to learn every programming language out there. I really wanted to create, just Zelda. And also by the time I graduated high school, I was not programming Zelda. I never even got like that Teris program working exactly right. But mostly it was just playing around with really small programs. And I took this idea and I put it into my book, "The Big Book Of Small Python Projects" which are all text based programs, which I feel like is very 1980s, and might not capture people's imaginations. But the real benefit of that is that because the source code is in text and the program output is in text. It's a lot easier to see the cause and effect behavior between those two. And I just wanna assure people that you don't have to be a genius. Certainly I, and my coworkers, when I was working at a tech company, we made lots of learning experiences. Let's call it. - I like it. I like it. - Yeah, and I had the benefit, of then knowing what I wanted to do. So I went to the university of Texas at Austin for a computer science degree. A lot of it was, was good timing, after graduating, I moved to San Francisco and got a job there. And this was sort of before the housing prices really skyrocketed. And so I was able to get experience there and I've just had a lot of opportunities and privileges. And I thought, well, this is something that I want to make available to everyone, because everyone should have the benefits of generational wealth, growing in a household that has a computer there. I remember I would go down to the Barnes & Nobles after school a lot, and then just sort of pull these $60, $80 books on programming or computing and just sort of, I treated Barnes & Nobles as my personal library sort of. - Love it. - Yeah, it got so bad. This was in the nineties before cell phones. It got so bad that my friends would often call Barnes & Noble. - Oh, wow. (both laugh) - And then, so they would go on the PA and it's like, "Would customer Albert Swaggart please come to the front desk, you have a phone call," which thinking back on it. Wow. Those employees must have had a lot of patience for this random teenager who's showing up day after day. Yeah. So a lot of these little stories of how things worked out. And I remember you can often find times find a deal on Udemy to just sign up for the course for $18 or $20. Especially if you open the website in privacy mode, when the website thinks you're a brand new customer, they'll offer you the deal that way. - I love it. - But, but I still remember being a teenager where, $18, $20, that's still a lot of money for me. - It is. - It's something that I feel like I've gotten a little too used to having that Silicon valley tax salary kind of level of money, but also at the same time thinking, well, this is a barrier to access to a lot of people, both outside the United States, but also within the United States as well. And so how are the... What are the things I could do to get rid of most of these barriers and putting the book online for free seems to be really great. - True. - Yeah. I mean, computers are just absolutely amazing devices even though they're just all around us all the time, we've gotten used to them, but it helps to stop and think, it costs me about $15 a month to have this web host. And then I can just... Took a lot of work to write the book, but once it's written, I can just put it on this website and tens of thousands of people can download it and I pay like 15 bucks for that. And so it's incredible what you can do with computers. And especially when you know just a little bit of programming. - Yeah. I mean, I think it's fantastic. I mean, I love that. And that's sort of my mission on my channel and the stuff that I do like you. Try and give away as much as I can. And what I find amazing in sort of the community that I'm in is a lot of people who can afford it will support me to allow more and more people who can't afford it to get it for free. So I think we all win, it's amazing. And I love it that you are making all this knowledge available for free. And these days, what are the requirements for Instance to go through the book, you just need a computer, some couple of computer, is that right? - That's right. And these days that's becoming even more and more accessible, even if all you have is just a tablet or your smartphone. There's also online interactive shells in Python and all these online tools. I was at PyCon earlier this year. And the big news from there was just running Python in the browser, just getting the actual C Python code running in the browser. And they stress, this is still very early alpha release software, but everybody's just really excited. It's so amazing that people are just saying, oh, you can now run Python in the browser. And it's great. - Yeah, I mean, it's so true because I'll say this. A lot of the audience who watch are in India and other places, and I've had people say, David, how do I study? Cause all I've got is my cellphone. And I mean, it's a huge development that you can code in a browser. Just go to some of these sites and spin up a server or just directly in the browser and learn. So the barriers to entry are so much lower. It's fantastic that you're doing this. When we spoke about the gateway drug into coding. I think it was games is that what... That's got you hooked, is that right? - That's right, yeah. So I feel like a lot of people followed that path of, hey I'm really interested in video games and I'd like to create my own video games, even though, especially these days you can have... I teach kids from time to time and they'll sort of have inflated expectations of like, hey, let's make Minecraft. - Just like AI. - And it's like, well, we have an hour and a half, so, hmm. But at the same time, it is sort of a very common gateway to learning how to program. But I also wanna acknowledge, it's not the only way because in fact not every child or every adult is interested in video games. There's also a lot that you can do with music and art and using programming there or just you have a very tedious office job and you want to automate a lot of those boring tasks that you have. And it's really amazing that in the last 20 years or especially 10 years. I feel that either the '90s were sort of when PCs were getting more and more into homes and then the 2000s is sort of when everyone was getting online and on the internet. And then the 2010s is really when everybody's on social media and now we also have smartphones in our pockets. And so, if you were just somebody who chatted online with your friends every day, 25 years ago, you were a huge dork, but today you're just the average Facebook user. - Yeah. I mean, that's what I love about your books, 'cause you've got "Coding with Minecraft." So if someone... That's aimed at kids, is that right? Or is that just general like code games and stuff? - It is aimed at kids. I have the strong suspicion that there are a lot of adult Minecraft players out there. ♪ Never play enough games ♪ Game (indistinct) starting off with the ultimate game of all time, Minecraft, that's right. (upbeat music) - Possibly myself included in that. Yeah. "Coding with Minecraft" covers a mod called computer craft, which adds these programmable robots into the game world. So you can craft these robots and then you can write code in the Lua scripting language. The robots themselves are called turtles because they're very much like the old logo line drawing turtles where you can tell them to move forward, turn left, move forward, start mining things, start crafting things. All the... I joked earlier with the publisher. That's like, "Well, how about we call this automate the Minecraft stuff for the book title." And then we decided to pass on that. But yeah, it was sort of like how it's like... Mining stuff in Minecraft is actually getting pretty boring. How can I automate this with some robot? - But I love it because I mean, I think what you've done, which is great is you've got a range of books and some of them are like you've got Scratch programming, you've got "Coding with Minecraft," but you... so that covers perhaps for my... I know what you're saying earlier about kids. You mustn't expect that you have to start coding when you're young. But I think when you're a parent, you also have the other problem where you think, okay, how do I get them interested in coding from a young age? I'd like them to learn this stuff, 'cause it's a skill that can change your life. And I mean, that's a fantastic way to get in. So get them in through the games like you got in. But then for other people who do or not into games, you've got this. I think you mentioned, the way to program is gaming Excel and then hacking, those are three things that you kind of cover. Is that right? - Yeah. Yeah. So my other book "Cracking Codes with Python" goes into how to break very simple ciphers. These are sort of the classical ciphers that people used up until world war II. Once we started having computers be able to do code break for us, but these are all sort of simple substitution ciphers and the visioner cipher and transposition ciphers and all these other things that... I used to have these books that were sort of like spycraft for kids and how to use lemon juice to make invisible ink and that sort of thing. And they would always have some sort of decodering section in those and you can still find a lot of these books today, but I thought, well, it'd be really great to learn how to program and write books that can do these ciphers and then also write programs that can break these ciphers. So if you don't have the encryption key, you just have the cipher text. How can you use computers to analyze that and then recover the original plane text from that. And then at the very end, I go into the RSA algorithm, I- - (indistinct) the story at the beginning? Sorry, go on. - Oh yeah, yeah. I warn readers to not actually use any of the encryption programs that they write in this book because clearly, for a real world encryption they are very much not sufficient for safeguarding your data. I think a lot of people do get a kick out of just watching their computers start crunching a bunch of numbers and then spitting out the answer. - There's this trend in networking in the last few years, which is like, you as a network engineer, you need to learn Python so that you can automate your network. When I was studying a Python course at... I don't wanna mention the name, some university here in the UK, I found it really extremely boring because they were doing math rather than, I've got this problem, I wanna solve it. But now you're teaching me some other arbitrary stuff. And I think what you've done great here is you've taken different reasons to learn this. You're giving people a reason very, very quickly. Like if you do this, you can automate some Excel task or some task that saves you time. So you're not learning coding for the sake of coding, you're learning coding to accomplish something. - Right. I mean, if you do wanna become a software engineer "Automate The Boring Stuff with Python" is a great introduction to that career path. But it is by no means comprehensive. I skip a lot of minor topics where I feel like, well, you don't actually need to know this. So less comprehensions or object oriented programming and classes. I completely skip that because I just wanted to go from zero to productive in as little time as possible. I also remember a lot of my computer science education and I'm glad I have that CS degree. And I did learn things in it, but at the same time, I don't view it as strictly necessary to go through a four year program to be able to be productive or even to get a job. Certainly having that piece of paper does help you get your foot in the door for those jobs. But I feel like we tend to teach programming and computer science in the same way that we learn it. And so, yeah, you'll find that a lot of computer science sort of grew out of mathematics from universities. And I have a whole rant about how much I don't like pseudo code, especially pseudo code that uses Greek letters for variable names because, well, you can't actually type Greek letters on a standard keyboard and the pseudo code isn't something that you can run under a debugger. And it really helps to make the code examples for some algorithm fit on a single PowerPoint slide. - Yeah. - This math notation is really terse and cryptic and looks downright something a celtic maybe, but that's because people are writing it on chalkboards or on paper and you don't wanna spend a lot of time writing out long variable names. So I feel like with a lot of programming, we just got used to calling our variable names X or Y even though we're not writing on chalkboards anymore, we're typing on a keyboard. We can write out much more descriptive variable names, but it's a very hard habit to break. This was something that I thought about a lot in my upcoming book, "The Recursive Book Of Recursion". - I saw that. Yeah. When's that out? - So that should be coming out in August. So- - [David] Oh great. - Yeah. And you can go to nostarch.com, the publisher's website and then get the ebook version of it immediately. They're really nice because when you order or pre-order the print book, they also give you a DRM free version of the ebook as well, so that you can just load it on your own devices or read it on your laptop. But Recursion is one of those topics that is just famously difficult to understand. And so I started looking at it, and I thought, well, I think a lot of CS professors and instructors are just sort of bad at teaching it because they're teaching it the way that they learned it. And we've never thought about, well, what are the things that make this more confusing than it has to be? So I found out with Recursion, it's telling people what the call stack is, was a major thing that was previously not explicitly explained to a lot of people. And that's really why Recursion is so much more confusing than it is. - I often find that I do a lot of teaching and I always call it the curse of knowledge. If you know too much, you actually your own worst enemy when you try and teach someone who's brand new. Because like you just said there, if you've done a four year computer science degree, this kind of stuff looks easy, perhaps. But if you've never coded in your life, it's scary and stuff like that can put you off. And that's what I love about what you've done in the book. You've really taken it down to make it as simple as possible. And you give good, simple code examples that someone can immediately see the result of. (laughs) - Yeah, I just over and over again, I think it's a matter of just asking yourself, can you make this simpler? Can you make this simpler? Just really letting your perfectionism run away from you. And then the editor will tell you, we actually need those chapters somewhat sooner. And so they'll keep me more grounded, but I feel like even with "Automate the Boring Stuff," I'm really proud that of the code examples I give in the book. I think those are simple. But then at the end of each chapter, I have these practice projects where I say, okay, now take what you've learned in this book so far and write a program that simply does blah, blah, blah, blah, blah. And a lot of people email me and said like, yeah, I don't really know how to do that. And then I realized like, oh, I just really was asking for far too much. So it's a note for the third edition that I really need to have more practice exercises that are simpler rather than just a few kind of complicated ones. But yeah, the more you know the easier it is to forget how hard it was when you were first starting out. And I think that turns off a lot of people from programming, because certainly there's what computers are capable of and what computers are not capable of is really mysterious. Because on the one hand, we can create all this amazing special effects for movies, say, and it looks incredible. But then also there are also some snake oil companies out there who are saying like, yeah, we use machine learning to take a picture of your face and we can predict the day you'll die or something like that. Recently, I was telling... Making a post on social media that it's really important to deflate the sensational claims that a lot of very click bait or click hungry websites will report about technology because, telling people, yeah, hey, we can put microchips in our pets and that will help find them if they're lost, because we can scan that, that's realistic. But then saying the COVID vaccine will put microchips in your bloodstream. That is not realistic. And being able to tell the difference between those two things can be really hard if you don't know that much about the capability of technology and software. And especially because you have a lot of outlets that really wanna hit you with a very compelling and frightening story saying like, oh, cars can now drive themselves, but can they also kill you? And your microwave will develop sentients and then try to poison your family or something like that. It's really hard if you're not really aware of what programming actually is to separate the bogus claims from the more grounded ones. - That's a good point. I mean, I wanted to get back to the book you've got... I've got version one here or edition one. You've got the second edition is current and your third edition's coming out soon. Is that right? - Oh, no. The third edition is still just a lot of ideas. - [David] Okay. - That I'm planning to work on. It is sort of something that I do want to eventually come out with, there's... A lot of people have been telling me like, oh, well, I'd like to do OCR to do text recognition. I'd like to cover text to speech and add that as a feature. And, mostly, I just have a lot of small details and it's really hard because I believe the book is over 500 pages at this point, the second edition added about another hundred. - Yeah, you added quite lot didn't you? - Yeah. And I just don't want it to have this big intimidating dictionary sized book that just slams down on people's desks. Are dictionaries even... Is that a thing that people buy anymore? I don't think I've actually used. - My kids dunno what that is. Exactly, it's like Google. So I saw a presentation where you spoke about the most popular parts of the book, because you were getting hits on your website. So could you tell us, what are the most popular parts? And then let's go to, I think, the least popular part. So, and I'll take a stab at that, but let's start with the two most popular or what are the most popular parts of the book? - Oh, okay. So just from looking at the website traffic, I can tell that a lot of people are into web scraping and then also GUI automation. And so in the book I cover using selenium as a way to automate and automatically control your browser. So using selenium, I remember when I first heard about it, I thought it was this big complicated tool that the QA department uses to automate their tests. And actually you can start controlling your web browser with just four or five lines of code, actually. (laughs) - That's brilliant, yeah. - It's great. Your Python script can then open up a browser and then automate clicking on things or filling out forms or finding links. And so much of what we do today on your computer is really what you're doing on your browser. You're just interacting with all these public systems. And so being able to write a program that can say automatically refresh the page and check for any updates on a website, and then notify you when you get an update that you're looking for, that's really helpful. If you just need to pull off a ton of data off of a webpage and then simulate a click to the next link, and then pull off all the data on the next page, and just do that a thousand times over, you can write a script to do that. There's a lot of things where you want to write scripts that sort of glue software systems together. You're not trying to create your own web browser, you have a web browser, you just need to take all the data off this webpage and then automatically put it into this Excel spreadsheet. So you just want to combine those and integrate those two software systems. Normally you would have to do this as a person just by selecting all, copying, pasting, and then doing that over and over again. And writing a script will... Even if it takes you just as long to write the script to automate this system, as it would be to do it by hand, I feel like programming is psychologically so much more comfortable. I'd much rather be spending two hours writing code to do something in one second than spending two hours doing that task manually myself. - But you got the code for next time. You can edit and change it - Yeah. Yeah. And that's something that I always point out to people is even if it takes you longer to write the code to automate a task than it would be to do it yourself, that's two or three hours of practice you're getting writing programming and you will get better and better at it and be able to write these little scripts faster too. And so the second part, I think the second most popular part on of the "Automate the Boring Stuff with Python" content is GUI automation. And this is essentially having a Python script that can automatically click and type on the keyboard for you. And this is a great way to sort of integrate your scripts and automate tasks with existing desktop software. For the browser, you definitely wanna use selenium or some other web scraping module, but for just a generic desktop application, it could be literally anything, there's probably not... There probably aren't any tools that can help you automate this tool yourself. But if you can then just set it up and then write a simple Python script to say, okay, click here, click here, check all these check boxes, highlight the text in this text field, and then copy and paste it into some other place. That's a really amazing feeling, especially once you finally get it all working correctly, and you can just watch on your computer, just hands free, the mouse cursor is moving around automatically and so precisely. It gives me that amazing feeling like when you see just an assembly line with robotic arms just automatically and perfectly performing all these steps over and over again. And then occasionally your program will start clicking on the wrong thing because the window is actually five pixels over than where you expected it to be, and then you have to stop it. I use the metaphor of that scene in the movie "Fantasia" where Mickey Mouse, as the sorcerer enchants the brooms to fill the tub full of water, but then they keep filling it and then eventually the water overfills and it's like, oh, this is automation gone mad. I had to put a new feature into the GUI automation module for Python that I created- - You wrote it, didn't you? - Yeah. Yeah. I wrote that. I was looking around on PyPI the Python Package Index, where you can download and install a lot of third party modules. There were a lot of modules that worked on Mac, but not on windows or vice versa, or they only worked on Python 3 and not Python 2. And so I thought, okay, well, I want to have a module that works on all platforms and also just has a very dead, simple API. So you can just say import PyAoutoGUI, PyAutoGUI.click, and then specify some X Y coordinates. Just really simple, you don't have to do any sort of setup or a knit or create your own framework for something. You will be amazed at how popular something can be if you just make it easy to use. - Exactly. - I feel like a lot of software engineers sort of forget that. We love creating these hierarchies of classes and it's like, oh, the Fu class inherits from the bar class and everything. And then the documentation, if we bothered to even write it. - Exactly. Yeah. (laughs) - Is just this exactly giant wall of text. And people are like, how do I actually do things with this? - Exactly. and sorry, I interrupted you. You were talking about the bath overflowing and then you had to do something. - Oh yeah, yeah. And so I had to add a feature to PyAutoGUI, where it just has a 10th second delay after each function you pass it because... So that way you can then slam the mouse cursor into one of the corners of the monitor and it will detect, okay, if the mouse cursor is in the corner, then just shut down. Because the really great thing about GUI automation is that you can watch the mouse cursor start clicking around. But if your program gets out of control, you can't move the mouse to close the program itself. So you needed just some way of being able to shut down without pulling the plug on your computer. - Yeah. I mean, it's... I mean, those are just two fantastic examples of how you can use Python, which is a simple language compared to others. And maybe we should talk about that. But before that, I was gonna say, I suspect based on a presentation I saw you give that the least popular part perhaps of the book is Regular Expressions. - Yeah. Yes and no. I mean, people do- - I certainly enjoy it because people don't like it. Yeah. Sorry, go on. - Yeah. It's regular expressions are important, but it is one of those things that can be confusing and kind of intimidating and you don't necessarily have to know it. And so people... It's a very popular thing to put off learning about. So just for people who don't know, Regular Expressions are sort of a miniature language for doing pattern, text pattern recognition. So if you're looking for a particular phone number in webpage, you can just hit control + F and then type that phone number in. But if you're just looking for any phone number, really you're looking for the pattern of text. And so here in America, that will be three digits for the area code and then a dash, and then followed by three digits and a dash and followed by four digits. And so a regular expression for that, you can then create a RegX as it's called, for that pattern. And then you can just feed it some giant text file or something like that. And you can find every instance of a phone number in that text document. And this is an incredibly useful thing. I have an example of the code that you would have to write if you want to do this recognition yourself compared to just using a RegX module such as Python's re module. But then again, it's something that eventually every programmer will have a need for it, but you're probably not gonna need it this week. And it is kind of confusing. So yeah, people will just keep putting it off as often as possible, but it's sort of like using a debugger where it is like, oh, this is gonna make your life so much easier. You just have to sit down and learn it, but it's like, no, no, I prefer just typing print and putting variables in there. But it's something that I definitely recommend everybody learn at some point. - And would you recommend Python as the first language or... And what's your opinion about other languages, like C or Java stuff like that. - Oh, wait, there are other languages besides Python. (laughs) I like it. Good answer. Oh, I like it. - I mean, it's... I remember as a high school and college student, I kept learning all these different new languages and sort of at the end of college, in the mid 2000s, I discovered Python and I realized I haven't really learned any new programming languages since then. I definitely recommend Python as the first programming language that you learn. It does not force you to learn a bunch of complicated concepts to do simple things. That's a big problem with, I feel Java where even to create a hello world program, you still have to type public static void main string args [], which I will have burned into my brain and until the end of my days. But yeah, with Python, hello world is just print hello world. And I believe there's the saying Python makes simple things easy and complicated things possible. It's really a language that doesn't get in your way. And because when you're first learning how to program, you're grappling with all of these programming concepts, and that's hard enough as it is. You also don't wanna have to learn all these tiny little details that the language forces you to learn. I recommend Python as the first programming language to learn, hands down. Other people will say- - Yeah, I agree. - Well, okay. JavaScript is useful and everything like that. And I feel, and I sort of agree with that, but at the same time, you can learn that later. It's also great to learn a second programming language, just so that you can see how two different programming languages compare. It's sort of like traveling to a different country just to see how things are different there and you learn things about your own country that you just sort of took for granted and thought was normal everywhere. So learning a second programming language gives you that perspective. But Python, I always recommend as the first language that somebody should learn. - I love what you did here, 'cause it's quick wins. I mean, if you're starting something new and I think that's a problem with Java and all these languages, you've got this massive mountain to climb before you see a result, but with a few lines of Python code, right in the beginning of your book, you already see a result. - Yeah. And that's something that I really like about the Scratch programming environment. - Can you talk about Scratch just for people who don't know what that is. - Oh, so Scratch it's a website you can go to Scratch.mit.edu. It's from the Lifelong kindergarten group at MIT. It's a wonderful programming environment for kids. It really has this immediate feedback where you take these code blocks that you can snap together and you can create little games or animations and then easily just with a click of a button on the page, you can then share it with other people as well. And you can also go onto the site itself and find other people's games and look at the source code for their programs as well. I think they made a lot of very smart decisions. For example, the code blocks. I'm sure you've seen tons of software pieces like this where instead of typing out the source code, you just use the mouse to drag them together and snap them together. And a lot of places have also copied this from Scratch. Scratch was essentially doing it to... Was the first to do it. And one thing that I realized is, well, if you have these code blocks that you can fit together, they only fit together in certain ways. And so it's actually impossible to make a syntax error in Scratch. - That's very clever. Yeah. - Yeah. They also don't have any error messages. They've sort of designed the language in such a way where if you're doing something weird, it'll have some very straightforward default behavior. And I can't tell you how frustrating it is for kids who already might not have the best typing skills, so they're just sort of hunting and pecking to type out this code. And then they get some inscrutable error message because they forgot a comma somewhere, or they added too many commas or something like that. And the error message doesn't say, you forgot a comma here. The error message will just say, end of line, string termination not found or something like that. So Scratch is a really great tool to get kids into programming because it has that immediate feedback. You can spend about five minutes snapping some blocks together, and then you have a little program that's not great, but it is entertaining for a couple minutes at least. And it really builds that confidence- - [David] Quick wins. - Yeah, exactly. It's quick wins. - Yeah. I love it. I mean, Scratch is great. And so you would... Would you recommend Scratch for what age group or would you say straight into Python or does it just depend on the individual? - So I used to teach a Saturday morning programming class for kids, and I feel that the official scratch age range is from eight to 16, but I found that older kids sort of start feeling like it's too kidsy and cutsey. I mean, Scratch does a great job of not dumbing down any concept, so you are programming, but the presentation is a bit kidsy. And so I find that eight to 12 is about a good age range. Usually around 13 or 14 kids sort of wanna move onto a real Python or a real programming language like Python, but at the same time I still use Scratch whenever I have like, oh, I have like a little idea for an animation say, and I just wanna throw... I wanna rapidly prototype something together. Scratch is actually a great tool for that. - [David] It's ready. Yeah. - Yeah. But really if you have an eight year old and they say, hey, I wanna become a cool super hacker and learn how to program and they're excited and interested in it. You can just start them off with Python immediately. I feel like as long as the kid has interest that's there, Python is certainly easier to use than Basic was for me when I was that age. So, if anything, it's more appropriate. And then also the Scratch people also have ScratchJr, which is a tablet and smartphone app, and that's even simpler than Scratch. I don't have a lot of experience teaching kids with it. I've just played around with it. And that's for the five to eight age range. And really, I think the only programming construct they have is sort of direct movements and then loops. I'm not even sure if they have, if else branching or anything like that, but they intentionally make it very simple. So certainly nothing makes me feel old than watching toddlers expertly use iPads. - Exactly. Yep. I know the feeling. - There's a lot of quality tools out there and Scratch and ScratchJr are also completely free to use. - I mean, I think just looking at the books again, if I was an adult now and I wanted to learn Python, which of your books would you recommend as a start? Is it the "Automate the Boring Stuff?" Or is there another book that you would- - Yeah. - Or does it just depend on interest? Sorry, go on. - Yeah. I would definitely go for "Automate the Boring Stuff" just as a general programming guide. If you were into making little games, then "Invent Your Own Computer Games with Python" is also for complete beginners with no programming experience. And then if you do sort of find the idea of making these little code break programs to be interesting, "Cracking Codes with Python" is also made for people with no previous programming experience. - I'm glad you said that. 'Cause I was gonna ask you, do you need any experience at all? And so it's just different paths, is that right? Like different interests and then get your... The book takes that interest and then builds your Python knowledge. - Yeah. And I feel that's a big part of my job, especially today creating Python materials for beginners is just figuring out what interests people and then finding that as an angle to get them into programming because there are so many beginner program... Like learn to code resources and things. And some of them are very well done. And then others are just clearly they're copying and pasting things from Wikipedia just because they wanna make some quick bucks from this whole, everyone needs to learn to code sort of idea that's out there. So yeah, ciphers is one, video games is one, automating Excel spreadsheets is another idea. And then the Minecraft or Scratch. I joke about this, but it is actually true. I sometimes do forget all the books that I've written. - No, that's fine. I mean, I was gonna ask you, let's have done the basics now, then you've got "Beyond the Basics Stuff with Python." Does that introduce object orientated programming? Does it introduce other more advanced topics? Or is that like an- - Yeah. - Sorry. - Yeah. Yeah. A lot of people kept asking me like, okay, I've read "Automate the Boring Stuff" or they've read some other beginner Python book, like "Python Crash Course or some Udemy course, but they still feel like they're not writing code the way that expert experienced software developers write code. And so I thought, okay, well, I need to write a book that is for them. And so a lot of it is sort of the same kind of material that the book "Clean Code" covers, but also at this point, "Clean Code" I believe came out in 2000... Late 2000s, maybe - They're old. Yeah. - Yeah. And so some of the advice has held up and some of the advice has not held up, but I thought, yeah, okay, well let's have a book. I'll just call it "Beyond The Basic Stuff with Python," just to carry on that stuff in the title wording. But yeah, so it goes into some advanced Python concepts about the Python language and some of the gotchas and more esoteric features. But I also cover general programming topics like object oriented programming and creating classes. And I try to explain classes as why do you actually need this? And classes are a great way to organize your code, especially as your programs become larger and larger. I feel like the mistake of learning Java as your first programming language is that you think, oh, we need classes because that's just how you write programs. You fit everything into a class, and then you start creating these. (indistinct) Yeah. You start creating these massive inheritance hierarchies of A subclass, B subclass C and pretty soon your source code is really complicated and hard to read, and then you realize, oh yeah, it just prints hello world to the screen. (both laugh) - I think it's that problem once again, codes of knowledge and sorry to interrupt again. Go on. - Oh yeah, yeah, for sure. And I've seen a lot of software developers sort of fall into that trap. They just have the engineer brain- - Yeah, exactly. - Where it is like, oh, well it makes sense to me. And you put all these complicated pieces get to together and then you... You have to remember that computers exist to make human lives easier and not the other way around. But yeah. So "Beyond The Basic Stuff with Python" also goes into some, what I call software engineering best practices. Like how should you write your functions? What kind of names should you give your variables? I've noticed that I think data is pretty much the worst variable name that you can name your variables. It's yeah. Though, what is this variable contain? It contains data. (both laugh) I say, it's sort of like if you were moving houses and you just labeled all of your moving boxes as stuff, which is sort of laid later on to that process. So like, oh, here's bedroom things, here's kitchen appliances. And then after a while, I've just give up and I'm like stuff, stuff, stuff, stuff like with moving, if you keep giving sloppy names to your variables, that's going to bite you later on when you actually have to check your source code and say, hey, what does any of this actually do? And a lot of this stuff isn't... This isn't a thing that you'll learn in these hello world tutorials, where you're learning the syntax of a programming language. And I tried to take all of this random information that I had learned over a couple decades and actually just put it into one book where it's like, okay, you can just sit down and read this. There's still plenty more that you'll learn just from day to day experience. But this will just give you that one leg up. I forgot the, the other chapters in that book, but it's just sort of like the best practices for writing your code the way that professional software developers will write their code. - But I love what you've done because the first book is like, give you a taste of what's possible and wet that appetite. Like I wanna learn to code and you have these quick wins, you can do a bunch of stuff without... (chuckles) Stuff. I shouldn't say that. Sorry. you can do a bunch of things without having to learn all this software, like programming, computer science stuff. And then once you get the foundation right, then you get, okay, now that you've seen what's possible, now I'm gonna teach you how to scale this up. And I think that's a fantastic way to do it. - Yeah. That's another thing that I write about in "Beyond The Basic Stuff with Python" is I have a chapter on environment set up, which is sort of just the general term for how do you get Python installed on your computer? Because this is always a surprisingly complicated thing because some people have windows, some people have Mac, some people they're using their company laptop and they don't have the permissions to install software. Oh, but now their path environment variable isn't set up. - Exactly. - So like when they type Python, they're actually running a different version of Python because they have multiple versions of Python installed. And so I go a little bit into just using the command line and some basic concepts like that. But a lot of times when I'm... Whenever I do a workshop of, Hey, learn to code in Python even if you have no experience, I often find, I have to do a pre-workshop workshop just to make sure everybody has Python installed on their computer and everybody can just get hello world to appear on the screen. And then we can move on to actually learning how to program. Again, when you've had decades of experience, all of this stuff is just like, oh yeah, you have to do this. And if it gives you this error message, it actually means that you have to change these configuration settings and things like that. We know all of this just because we have experience, but it is just a complete blocker for anybody else who does not have that experience and just sees this. And then just sort of says like, well, I have no idea what to do because they don't realize that professional software engineers are just Googling these questions anyway. - [David] Exactly. - We don't know what these error messages mean either. - Exactly. Yeah. I mean, it's intimidating when you start out, it looks like magic, I think you've said in... I've heard you say, but it's not like that, is it? It's just once you realize what's actually going on, it's just a bunch of humans trying to make things work and we all make mistakes. - That's another common anxiety I see with people learning to program is they say, well, I've been doing this for three months, but I still have to Google every single day. Like when will I be able to stop Googling things all the time? It's like, when you die. Uh, yeah. It's like, might wanna sit down for this. (both laugh) Programming seems magical. Especially computer security and hacking topics. That also seems... There's plenty of jokes about how hacking was portrayed in movies and TV shows. - Exactly. - And then how hacking is portrayed in real life where it's just sort of like quietly typing at something and then pressing enter and then (indistinct), no, that didn't work. Oh, wait. Now it did work. Okay, we're in, I think the one common thing between movie hacking and real life hacking is, personally, I love saying, I'm in, whenever I've finally am able to accomplish something. - It's really interesting your story. Sorry to interrupt again. - Oh, yeah. Yeah. - It's great to hear that you were interested in hacking and I think hacking is just like "Mr. Robot" more recently, the series is a great example of how people can see what it can do, but then you've gotta make a decision. And the decision hopefully is be on the good side not on the bad side of that. - Yeah, exactly. Yeah. "Mr. Robot" did... There are still parts of that show that are sensationalized, but they tried to bring a much more grounded portrayal of what a lot of computer hacking is. And so anyway, "Cracking Codes with Python," it doesn't cover any actual encryption algorithms that are in use today. Even the RSA cipher or RSA algorithm, I cover at the end of the book, it's sort of what's known as textbook RSA, which, technically, yes, it is encrypting, but actual encryption programs. There's so many other factors that you have to think about and protect against that you shouldn't actually use the program in this book to do that, but it does give you... The book does give you a good idea of why a lot of encryption algorithms can fail because you can do frequency analysis, because you can do count counting up sort of the spacing in between identical symbols in the cipher text and all of these other things about why... It's what some clever person in the 1600s came up with to encrypt their text, is not going to work today here in 2022, when we're all basically carrying super computers in our pockets. - But I love it. I mean, it's a game you've given someone who's interested in that stuff, a reason to learn Python. And the net result of that is they've learned how algorithms work. They've learned about ciphers. They've learned about decryption. And I love that you don't just show them how to encrypt, you show how to decrypt and how to recognize patterns and all this kind of stuff. So you walk away with a lot of knowledge if you're interested in that kind of thing. Just like automating web browser, It's all this, you're giving people a reason to learn. And then they're picking up all this Python knowledge along the way, it's a fantastic way to do it. - Yeah. I went to DEFCON for the first time ever a few years ago, and this is sort of living out the teenage dream that I had because I like did not have enough money to fly out to Las Vegas when I was a kid. But I was really struck by how so many security professionals actually didn't know how to code. They're just used to knowing all these network concepts and using all of these tools for their job, but actual programming wasn't necessarily something that they knew. And so it was really amazing 'cause I felt like, well, you can just write all these tiny scripts to automate different tools or glue them together with some Python scripts. And it's a really powerful skill to have. - [David] I agree. - No matter which job in tech that you're doing? - I'm with you on that because it's... You've mentioned it before, You're not becoming a Facebook developer that's gonna build an app like Facebook with millions and millions of users, that's like a software developer path. But if you're into ethical hacking or you're into network automation, like if you're a network engineer or you're into something else, stuff like this can just save you so much time and it gives you so much power. Once you start coding, you can't go back. - Yeah, exactly. It's... Oh, I use the metaphor of it's like learning how to drive a car, you're not necessarily gonna become a race car driver or a taxi cab driver. But it is... Even if you don't own a car it's a useful skill to have in your back pocket and you'll be able to go much further than without having that skill. - Al we've been going for a long time. Do you wanna say anything or have you got anything to share before we wrap this up? - I just really want to point out how many opportunities and privileges that I've had in my life that have gotten me to this point and how important it is that we do take active steps to include other people in our communities. The Python community especially is great. I go to PyCon as often as I can. They just started up again this year, and I plan on going to PyCon next year as well. But people in the Python community, it's not just that the Python programming language has technical merits, but it's the people behind the language as well who are taking the time to make sure that it's easy to learn for others, that it's accessible to others, that you don't just have to be this stereotypical standard software nerd to be a part of it. And it's really important because programming is amazing and it's something that we should be making available to as many people as possible. And it's not enough to just say like, well, we don't have a rule that excludes certain people or something because exclusion happens automatically anyway, people will look at a group and say, well, I'm not sure, is this for me? Or is this not? And they'll just sort of pre-select themselves out of it. And I feel like that is a definite loss and that we should take active steps to prevent that. - I mean, it's fantastic. And you know what I, again, I really want to thank you for making your books freely available. I come from South Africa originally and there's a lot of poverty out there in places like South Africa. And it's amazing how you making education freely available. And I'm a firm believer, if you can educate someone, they can change their lives, but also the lives of their family and the generations they're after. So thanks so much for making the books available for free and not putting it behind a pay wall. - Oh, thank you very much for having me on this show. - Al, thanks, all the very best. - Oh, thank you so much. (upbeat music)
Info
Channel: David Bombal
Views: 213,902
Rating: undefined out of 5
Keywords: python, minecraft, python book, python books, cipher, ciphers, cracking codes, al sweigart, python for beginners, python full course, python tutorial, python programming, python projects, python tutorial for beginners, python course, python for data science, machine learning python, automate the boring stuff, no starch press, no starch press python, automate the boring stuff with python, hacking, coding minecraft, minecraft code, excel, scratch, python games, games, python kids
Id: 7iBqoc-DzTQ
Channel Id: undefined
Length: 70min 15sec (4215 seconds)
Published: Sun Jun 19 2022
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.