Hello, everyone. So in our last video here on Python classes, we are going to talk about equality when you are comparing two custom classes and also a concept in Python called Dunder methods and what they are and how you can use them to your advantage. So let's get going. We often, when we're writing our code, we need to check for equivalence between objects. Is x equal equal to 5? Are two things equal to one another? And of course, we have a variety of other Boolean comparison operators that we need to use less than, greater than, things like that. Well, you may find yourself in a situation where you need to compare two custom data types that you have defined using Python class construct for equality as well. So let's try the following. We're going to create two of our student classes. And I've augmented my student class to include a student ID number. And let's compare them. So I'm going to switch over to my code and we'll do this exercise together. So I've got my code here. Make it a little bit bigger for you all. So before I get into equality, I want to show you one thing. So I'm going to add a third class variable here, a third piece of information that I want to represent the student ID number. And the ID number is just going to be a nine digit number. Here at UNCW, our ID numbers begin with 850. So I'll do 850, 1, 2, 3, 4, 5, 6. Now I need to, so I've added the student ID number. What I need to do, of course, is to add this ID number as a parameter up here. Now you may be tempted to do, well, ID. And you'll notice, if you're using PyCharm anyway, that PyCharm highlights this. And it says something called shadows built in name ID. Now what does that mean? You will see this occasionally. You'll also see it if, for example, you use the variable min tells you the same thing. Shadows built in name min. What that's telling us is it's giving us a warning, because Python also has a function named min. And it also has a function named ID, which we talked about in an earlier lecture. So Python is warning us, hey, you're redefining that name. That thing already has a name. And you are allowed to do this in Python. But you're liable to get some unexpected behavior if you do do that. So it's important that if you're making variables or defining your own functions or methods, don't use the names of Pythons built in functions. Make your own. So instead of ID here, I'm not going to use ID, because that's the name of a built in Python function. I'll call it student ID. You could call it something else. But just a good practice. Don't name your variables or functions or methods the names of Pythons built in functions. You could wind up in a situation where you think you're calling a Python function, but actually what you're doing is referring to a variable. Python will let you do it, and you'll get some weird behavior probably. So I'll call. All right, so now I've got a student here named Alice, Jones. So I'm going to make two of these students. I'm going to create two of them. One is student, Alice Jones assigned to x, and the other is assigned to y. Now, keep in mind, though, what are we doing when we call the constructor here? We create a new instance of class student. And in fact, we're going to create two instances. It's not going to try and strangely reuse this one just because it looks the same. Python doesn't do that. But they've got the same data, first name, last name, ID, exactly the same. So if we check, are these guys the same? I'll do it this way. If x equal equal y, print, they are the same. Else, print, they are different. So if these two things are equal, which it kind of looks like they are, we should print they're the same. Otherwise, we print they're different. So let's try it. Let's run this. They are different. Well, why are they different? They've got the same data. Well, the answer is this equality right here is doing what we call shallow equality. So what is shallow equality? Let me add a couple of print statements in here. Let me print x. And let me print y. So let's run this just so we can see what it does. When I printed these things, it said main.student object. So that's saying you've made one of these student things at here. Well, what is this? It looks like a memory address. And in fact, if we were to print the hex, how do we get the address? We call ID, ID on an instance. And this looks like hexadecimal. So we need to convert it to hex. Let's rerun this. Student object at this memory address. Here's the memory address. So what's happening here is what we call shallow equality. Shallow equality. When you compare two objects with equal, equal in Python, what it does by default is it goes and it says, are these the same two objects in memory? In other words, do they have the same memory address? If so, if x and y are both pointing to the same object in memory, yeah, it's got to be the same thing. It must be the same thing. And that's what Python is doing here. So what if we do this, x, y gets x. Go punch this into Python tutor and watch and see what happens as you step through. X and y start out different, pointing at different things. And then when I do y gets x, they're going to point to the same thing. So now when I print this, let's run it. When we get to this point, x and y are variables. They're pointing to a place in memory. And it's the same thing, same object in memory. So yeah, x equal equal y. This is what we call, again, shallow equality. Now note, I'm going to change this back, so I don't x and y are two different instances. They have different memory addresses, but they have the same data. They have the same data. Python isn't that smart. It doesn't know that they have the same data. It's just looking at their memory address. Is it the same thing? If so, if the memory address of x and y are the same thing, they must be the same thing. They must have the same data. Go back here. This is what we call shallow equality when the variables refer to the same object in memory. Very basic, very simple view of equality. But maybe not what we want, because it's probably the case that we want to consider these two different student objects to be the same thing, because their data is the same, or because maybe their ID number is the same. Maybe in our program, in our system, we want to consider two students to be the same if their ID is the same, but maybe their names change. Maybe someone gets married, or maybe someone doesn't want to be Alice anymore. Maybe they want to be Alex. So we can define how we want equality to be for our custom objects. So we would like two objects with the same data, but perhaps living at different memory addresses, to be considered equivalent. The way that we do that is by having deep equality. Deep equality is when two objects contain the same data values. OK, well, there's a way to do that in Python. Let's go over to our code. All right. I'm going to go back over here and get rid of my print statements. What we will do is create a new method that looks kind of like a knit. It's another so-called Dunder method called EQ. What do you think EQ is short for? Equals. Again, we've got two underscores. Underscore, underscore, EQ, underscore, underscore. One parameter called self. And then PyCharm is calling this other parameter other. You might, I'm going to rename this. It's OK to rename it to write. So what happens is when this method gets called and we've got to return something here, what we have to return is a Boolean. You know what, let's finish out the method first. So if, let's say that we want to consider two students to be equal if all their data is the same. So how can we check if their data is the same? Well, the way that Python interprets this call, I'll change this back to other. If you have x equal equal y, like we do down here, this is the call, what happens is Python says, self is x in this expression. Self is going to be x, other is going to be y. Left equal equal right. That's why I almost called this thing right. Other here takes on the value of y, x here, or self takes on the value of x. So the self is the left-hand side, the left-hand side of the operator. And y is the right-hand side. Other is the right-hand side of the operator. I think I'm reversed on my screen. So self is the left-hand side of the equal operator. Other is the right-hand side of the equal operator. So if I want to check that they're equal, what I do is I'll say, all right, if the self, if the left-hand side's first name, is equal to the right-hand side's first name, I can return true, else return false. The equal method, the equal operator, must return a Boolean value, either true or false. That's what it has to do. EQ must return a Boolean value, either true or false. That's it. And that's all it should do. You shouldn't be printing in here. You shouldn't be doing any computations. You should just be figuring out is the left-hand side of the equal operator equal to the right-hand side? That's it. So if self.firstname and other.firstname are equal, it'll return true. But that's not good enough. We want to make sure that first name and last name and student ID are equal. So we can do and self.lastname equals other.lastname. And finally, so I'm getting kind of long on the screen here. What I'm going to do is I'm going to add a backslash. And Python, that backslash lets me break my expression between lines. And that's all it does. You don't have to have this. Let me do it without it at first. And self.studentId equal equal to other.studentId. So there's my big, long expression for this. And actually, PyCharm's kind of yelling at me, saying this line is too long. Well, if you're in PyCharm, it's smart enough that it can break up this line. So if I put some line breaks in here, this little thing just means it tells Python, continue forming the expression out of the next line. If you take this out, you're going to get a syntax error. But if you have everything on one line, that's fine. This is just for readability. And in fact, I'm going to put everything back on one line, because I don't really want to confuse you. So we've got this big, long expression. Now, we've got x and y. And if we have done this correctly, if we've overridden this correctly, what's going to happen is when Python sees this, x equal equal y, it's going to say x is a student. Go to the definition of student and see if there's an EQ method. There is. OK, let me use it. So when we run this, and then it'll run this code, when we run this, we get that they are the same. Well, now we can change these values. Let's change Alice in the second one to Alex. This should fail. They're no longer equivalent. First name in the self is not going to equal the first name in the other. They're different. So now this EQ method gives us a more refined way or a more specific way of defining equality between objects. You're going to find this very, very, very useful, because you wind up using this sort of thing a lot when you write your code. Now, there's a more OK. So that's kind of the big thing with EQ. Must return a Boolean value, either true or false. We can actually make this a little more succinct. Look at this big, long expression. What does this evaluate to? Well, an if statement, its expression, this conditional, it's an and statement with a bunch of equalities. This thing will evaluate, imagine this in parentheses, it's going to evaluate down to true or false. So we can shrink this. This expression is true or false. It is what we want. So we don't actually need an if statement here. We can just return the result of evaluating this. It's mad at me because I've got to get rid of this colon. There's a colon that you can't see down here at the end. Let's run it. Still working. Still working. Change it. They're different. So this is the equal method. Very cool, very useful. Let me go back to the slides here. So now we have deep equality. Deep equality, the data items in the objects have the same values. We have overridden the equal method. But what happens here? If we're comparing two students, we're in good shape. But what happens if we compare a student with, say, an integer? Let's try it. Let's go back to our code and try it. Let's compare x. x is a student to 5. Let's run this and see what happens. Attribute error. Int object has no attribute first name. And if you're in PyCharm, you can follow the stack trace. So here's the offending line. Line 13 in EQ. What it's saying is, what happened here? The left side becomes self in this method call. The right side becomes other in this method call. And it's saying, int object has no attribute first name. Well, other here has been substituted with 5. 5.firstname? That doesn't exist. That's the attribute error. What does the dot operator do? The dot operator accesses attributes on a class instance. Ints, integers, ints types, doesn't have a first name attribute. They don't have a method called first name. They don't have a data variable called first name. So you get this exception. That's what it's screaming about you for, OK? So you're liable to encounter this particular exception, an attribute error. Something has no attribute first name. You're liable to encounter it a lot when you're defining custom classes. You've got to learn how to debug these error statements so you can effectively use your custom classes, OK? I'll put this back the right way. Go back to my slides here. All right, so just to summarize, shallow equality. Need to know these concepts. Shallow equality is when two variables refer to the same object in memory. So in our example back here, these things have deep equality because they have the same values, but they are not shallowly equal. They point to two different places in memory. This is one instance. This is a different instance, OK? Deep equality is when the data items in the objects have the same values, OK? So the implication here is that if you have shallow equality, you do also have deep equality. If you have shallow equality, you must have deep equality because they point to the same object in memory. However, conversely, if you have deep equality, you do not necessarily have shallow equality, OK? All right, so the EQ method, one final word on it. Now that you have defined the EQ method, you also get some other things for free. You get not equals, kind of cool, OK? And you get the in operator, right? So let me show you what I mean. x and y, they have deep equality, right? You get the not equal operator for free. So print is x not equal to y. And no, this should be false. This should be false now, OK? Because in our world, they are equal. So you get the equal operator for free. You get the not equal operator with EQ. And the other thing you get is the in operator. In tests for elements membership in a list or a sequence, right? So if we create a list, say students, with x in it and y in it, I've created a list, I can check to see is x in my list. The answer is yes, right? Because I have defined this EQ method, OK? Pretty cool, right? Pretty cool. Let's go back here. And one more thing I want to show you, OK? So when we print it, we're going to talk about the string method and the wrapper methods here, OK? So EQ, init, and now string and wrapper, they are what are called in Python dunder methods. Dunder because of the double underscore, right? Underscore, underscore, blah, underscore, underscore. They're also called magic methods. These methods are built, they're magic methods. They're in Python. And when Python is working with custom classes and you do certain operations, like equal, equal, or call the constructor, Python goes and looks magically, automagically, for definitions of these methods on your custom classes and calls them if they are there, OK? Dunder methods are a very useful one that you will find. Let's get rid of some of this stuff. I've got my two students here. Let's look at printing, all right? So let's print x.  Let's use something a little bit better, OK? So first, we're going to define a method called wrapper. Underscore, underscore, R-E-P-R, OK? This method returns a string. Must return a string. And the idea is that it should be the string representation of your object. Now, what Python recommends is that you make this string look like the constructor call that created the object, OK? So we'll do this with an F string, OK? So I'm going to create an F string. And what is my constructor call? It looks like student with some parentheses. And then we put in the first name, self.firstName. And then we call it with the last name. I'm just trying to mimic this. But what I'm going to do is I'm going to have the data that's particular to the instance that wrapper is used on, OK? And self.studentId. Let me make these students, I'm also going to make these students have some different data. So now let me print x and print y, all right? So now when I print them, I don't get that funky student object address, whatever. I get something a little more useful, right? Really good for debugging and stuff, I would think, right? And you'll notice when I called print, right, I don't call wrapper. I don't call wrapper. I don't do this. This is wrong, right? I don't do that. I don't have to. This is a magic method. Rapper is a magic method. Python sees I'm printing, and actually what it's trying to do is it's trying to convert this to a string. Since I don't tell it how to convert it to a string, instead it calls wrapper. And it says, ah, OK, well, let me print this. Here's something that'll convert it to a string. And it does it, OK? The other time you will see this, OK, let me make my students list again. Students is a list containing x and y. Now when I print out my students list, here's my brackets indicating a list, and here's the individual students inside, OK? Kind of neat. All right, there's another method, the last method I want to show you, which is the string method. underscore underscore string. This method must return a string. And it is called when you call stir on your object or print. Hmm. Well, maybe that's a little confusing because print was calling wrapper a second ago. Well, there's an order of evaluation here. First, if you call print, print will first try and look for this method. And if it doesn't find it, then it will use this method, OK? On the other hand, well, let's just fill this out. The difference between string is that string is meant to be user-friendly, right? Like, again, from the user's perspective, from somebody who's using the system. Or maybe this constructor-oriented shape isn't good. Maybe what we want to print is something that looks a little nicer, like the person's first name, followed by her last name. And maybe we want to say, and their ID is self.studentID. You can put whatever you want in here. These are strings. You can structure them however you want. This one, wrapper, is very conventional. It should mirror the constructor call. String, what's user-friendly to you? That's what this is going to be. Let's run this now. So you'll see these first two print statements are now calling myString method. You can also, this string method also gets called with, if you do this, OK? This is also going to call this guy. Well, now what I'm printing, I get the user-friendly version. I invoke string, not wrapper. Cool. However, wrapper will still get called in certain scenarios. For example, again, you are not calling these directly. Python calls them for you. One of the scenarios is here. When you print a list, when I'm printing my list of objects, I get their internal representation. Cool. We will also, I think we might be able to get it this way. Let's try it. No, it's not showing there. In some instances, when you get an exception printed to the screen, and that exception involves a particular instance of your custom class, wrapper will get called. So again, you should always define at least wrapper. And wrapper should always be what the constructor looks like. It's going to come up. It's going to help you debug your programs and debug error messages. And then also, if you want to have a user-friendly representation of your custom class, override the string method. So everything we just said about string and wrappers captured on the slide and kind of come back and review it. All right, so these guys, just to remind you, init, string, wrapper, EQ, they are dunder methods for double underscore. And Python looks for these dunder methods in your class definition to determine how to apply certain common operators. There are many, many, many dunder methods. You can tell Python how to use less than operator, greater than operator, and operator, or operator, all sorts of stuff for your class. You don't have to. But they're there, right? They're there. And they'll be useful in other contexts, OK? So you can go there and look at what all these different things are that you can define. Basically, any operator you can think of, plus sign, minus sign, less than, and, or, they're all there. But you should only define the ones that make sense for your class. Usually, that's at a minimum going to be init, wrapper, and EQ, OK? All right, so know what dunder methods are. Know how to define them and use these three that are on the screen. And we have gone through some huge important concepts in this module about Python classes and how they work. You have to understand conceptually what's going on with defining a data type as a Python class and how that impacts memory. And then you need to know how to implement it syntactically, OK? So there's going to be a homework assignment built on this stuff where you get to practice all of these things. It's challenging. It's one of those things you've got to wrap your head but once you do, once you really understand classes and data types, you will have evolved a substantial step upward in your understanding of how to write programs to solve interesting computing problems, OK? So let me know if you have questions, and I'll see you next time.


It's a show devoted to all things eSports. I'm your host, Catherine Norr. Today we're talking about Team 7AM and European Professional eSports. My guest is John Smith-Howell, the Managing Director of Team 7AM. Welcome, John. Hi, thanks, Catherine. It's great to have you back. I know you were on a bit ago last month to talk about the eSports Trade Association, but now we're going to talk about Team 7AM. Tell us about the team. Yeah, so we're a European eSports organisation, mainly concentrating on professional and competitive play, but we wanted to ensure that we had a community vibe and feel about us as that's something that's really important to us. We've been going for just over two years now, and we've seen tremendous growth in that last two years, which has been fantastic. And we're continuing to grow. We have more game titles and more teams than we've ever had before. And new sponsors and supporters, which is fantastic. So did Brexit impact you at all? Absolutely not. That's good. And you're located in England then? Yes, yes, I am, yeah. All right. So let me ask you, why did you name it Team 7AM? So actually, it was purely just for marketing. So I've been in the eSports industry for a long, long time. And I knew and seen that eSports and business were coming closer and closer together, and that eSports wasn't just about teams anymore and sort of playing with friends and competing, but actually it was moving into this business space. So when I wanted to create a brand, we wanted it to be something that was easy to say, easy to remember, and have a logo and a brand that was easy associated to us, taking in inspiration from the McDonald's and the Burger Kings and all these high street chains that you only have to see their logo and you know exactly who that brand is. And that's what we did. We took inspiration from that and created something short snappy. And yeah, this is it, Team 7AM. Do eSports athletes actually get up that early? I think they're more likely to go to bed at that time than get up at that time. That's what I thought. And so what game does Team 7AM play? So currently we're competing in League of Legends, Valorant, Rainbow Six, and Counter-Strike Global Offensive. Okay, and how many teams do you have? We have five teams. And are they professional or pro-am or how does that work? So our League of Legends team, the main team are professional. We have an academy team that back those up. Again, to just encourage bringing in those academy players, getting them up to speed and where we want them to be and then getting them into our main team. Our Counter-Strike team also play at professional level and so do our Valorant. Our Rainbow Six team are sort of, you know, just getting there. I would say they're probably at the semi-pro stage at the minute, but they're really fighting hard to get up there. And are you only playing in Europe or are you playing all over the world? So currently we're just playing all over Europe and of course, you know, the end goal is to be playing internationally. Okay, and what kind of tournaments have you been playing in the past year and how have you been doing? So the biggest tournament that currently we've played so far is probably one called the Belgium League for League of Legends. It's a European regional league and it's the only way that a team can fight for a spot into the European Masters. And so that is an invitation only league. There's only six spots in our league and we're very lucky to have an invitation there. We didn't do too well this season, unfortunately. We did finish last of our group. It was a very tough season for our team. That split has just finished and then we are now preparing for the summer split, which will start at the beginning of June. For our Valorant team, they have been playing all of the new European tournaments. Obviously Valorant is still a fairly new title on the scene and has seen the humongous growth from every aspect. So they're playing every tournament they can, including the Masters tournament, the VCT. So are your teams made up of only men or do they include women as well? So currently all of our players are male. We do have females in the organisation, but to us it doesn't matter if they're male or female, if they have the skill, the ability and the mindset that we would like, then it doesn't matter who they are to us, and they fit our brand, it's not a problem. Terrific, and so we always hear that no players are usually between the ages of 18 and 25. Is that the case with your team? Yeah, everybody, I would say maybe there's one or two players that sit outside of that, but predominantly between 18 and 25, all of our players. If we're to see that at some point the players will be older, or do you think it's always going to be between those ages? I mean, like my generation, I started playing in 1999, so I was well within that bracket, and then I still continue to play after 25, but you slowly but surely realise that you can't keep playing, you can't keep dedicating the same amount of time that maybe you did before, obviously things like careers and kids and girlfriends and relationships always get in the way. So ultimately you start to look at other areas of working with any sports. I think that gap will extend both ways, especially down as we were seeing a huge influx of the younger players that are coming in, especially within games like Fortnite, but that's expanding very, very quickly. I think in the next few years that it will be the norm to see 15-year-olds to sort of 25, 26, competing full-time within eSports. And what is your role with Team 7AM? So I'm one of the co-founders and I'm the managing director. So I lead from the front and try my best to guide and pull all of the strings in the same direction to try and drive and push the business forward. And what other player, I mean, what other personnel are involved?  Yeah, like I said before, eSports is now a business. So like any sort of normal business that you would see, we have a senior team that makes up of different managers. We have project managers and team managers, and then we have coaches and sort of operations people that just support and get involved with anything they can. We have a community manager. So it's not too different from any of the sort of businesses you see out there. You know, we still have to do all the normal things and have a marketing department and look at graphics design and social media and brand awareness. We still have to have an accountant. So it's not too abnormal from a normal external business, really. And are your players, are they streaming as well as playing? Some do some do stream and some just play. I think there's still a huge gap between people that want to do both. A lot of the time that's hardware based. It's it's quite tough to stream on and play on one PC. A lot of the top streamers will have a PC that just streams and then they play on the secondary PC so that they don't have any hardware issues. So I think they're still quite mixed with with who can stream and play at the same time. So do you have tryouts or what are your criteria for selecting play? So we will hold tryouts, but most of the time we will scout individuals before that. And then we will go approach those individuals. We go through an interview and selection process like you would do for a normal job interview. We really want to understand their their mental health, their what they want to achieve, you know, what do they want to do? Are they just playing for fun? Do they want to compete? Do they want to go all the way? And these things are really important to us and where we can fit them into our team. And then, yeah, once we have a pool of of candidates as such, we will then do some tryouts and see who who can walk the walk. So why is mental health important? It's absolutely crucial. I think it's one of the most important things that you can take in consideration. Anybody that doesn't say that esports and playing competitively isn't stressful to me is lying. It's extremely stressful. And the reason mental health is so important is because there is a process of learning. You need to lose games to learn and losing is not easy. Whatever you do in life, people don't like losing board games of monopoly. Let alone losing competitive games that they're playing against other people or people that they know. And it's how you deal with that loss. It's what you do with it, how you process that process that in your mind and how you reflect on that. And that comes from mental strength and having the support of people around you like myself who have who have played at that level and been around for so long to to support them mentally. Let them know that is OK to have down days. It isn't. It doesn't mean that you're not good enough. It means that you're mentally tired and you need to take a break. And sometimes you just need to structure the way that you practice. Sure. And we do have a question from a viewer. Can you explain how someone making someone makes a living as an esports gamer? Do you live off the money you make from winning competitions? Do you get sponsored? And so was that as a player? Sorry, was that as an esports organization? Player as a player. So as a player, you would you would start to rely on a salary. So our League of Legends team will be our salary.  Esports salaries aren't on the greatest at the minute, unless you're playing sort of wild class tier one events. Then, of course, the salaries are fantastic. But so is the pressure that goes with that. So initially, you would you would you would get some sort of salary. You would then get a percentage of any prize money you win, depending on who you play for and what organization and what agreement is in place. But most of them will most players will still back that up with another job, a part time job, or maybe they're in education so they don't need to work and they're living at home or in a good environment to be able to put the time in. Sure. And you how does that team make a living with shifted over to the team? Is that sponsorship and primarily? Absolutely. Ninety percent, if not more, has to come. The revenue has to come from sponsorships. It's still the big question that we have in eSports that is unanswered is how else do we monetize eSports? You know, sponsors is a fantastic way. And it's it's currently really the only way that we can achieve that. There is other revenues that will start to come in over the next few years, including TV rights, as we start to move into more towards the traditional sports and you have these huge TV channels who are picking up games in the vent. They're going to have to pay out TV rights, which will cause a big issue for Twitch, who, of course, you know, don't pay out at all when they're streaming or games. And so that will see a shift in that. But currently it is it is mainly just sponsorships. You can't rely on income from tournaments because you don't know if they're going to win. Of course, you can sell merchandise and that will also bring some profit in. But essentially, you want to try and keep your your prices down so that you can sell and have the have your supporters and fans be able to actually wear your merchandise rather than rely on that to make profit. And do you have any team houses? Not at the minute, no. So everyone lives independently, but do they practice together or with covid? Are they just practicing online? So everything is done online at the minute and has done, obviously, for the for the last sort of 18 months during covid. Of course, within the next year or two, we would love to get a gaming house and get teams together. And of course, arrange bootcamps so that our players can can ultimately meet and train and practice together and build that better bond and relationship. How has the pandemic affected your organisation? So it's going to sound quite horrible, but actually it's helped us massively. I think what it's done is it's it's shown the the retail world and the world that didn't have a digital presence.  So we've seen this huge insurgement of companies who now want to get involved in eSports when getting involved in digital presence. And for me, there is no better industry to rely on for that. With the eSports and the gaming communities have been with the first on the Internet and we've been doing this for a long, long time. There isn't a better industry that knows this as good as we do and how to engage and really put someone's brand where they need it in front of the potential buyers of whatever that may be. And as gaming has been around for so long and people of my age generation who is who are still playing as they're involved, well, we need cars and houses and house insurance and every other product that you can imagine that would normally you would see in a TV advert. We can now do that online because they're not watching TV. They're watching their screens and it's that transition period that we're going through. How important do you think the Gen Z market is to advertisers? Because I know that eSports really attracts younger people. But it tracks it. I think it tracks everybody. And I think if you look at the statistics from in the United States and from Europe, there is a huge percentage of people that sit between 25 and 35.  Most of these most people within the age bracket have a career. They have a job. They have an income. They have disposable income. These are the these are the people that we really want to aim to. And that is that. And that's what we what brands are going to get to. That's what we need to advertise to. It's really important that everybody's involved. Of course, the younger generation as well, because we can also advertise to them, whatever that may be new games that come out or of anything really. No, is Team Seven AM selling merchandise as well? Yes, we currently just sell this jersey that I'm wearing now. And but we will be bringing out new new merchandise over the next couple of months, maybe some caps or some hoodies. Not sure yet. So tell us more about what it was like to actually be a professional player. It was it was really fun. It was pressured. It was but it was stressful as well. You almost it's like having an outer body experience because everything else continues on behind you, but your mind and your focus is only on what you're doing on a day to day and practice and developing your skills and reflecting on what happened yesterday. What am I going to train today? I played Counter-Strike. So for me, it was about developing and continues developing my aim, my reactions, my thought process about what I could do differently. I was always the in-game leader for my team. So I also needed to think about strategy and how we can overcome enemies and how we did that and taking consideration how my players and my teammates, how they play, what are their strengths and what are their weaknesses. So that was really tough. But I've made some fantastic friends. I think I could travel most of the world and land in most countries and have somebody that I could go and visit. I'm from someone that I know or have played with or have communicated with over the years. I don't think I would ever have a bigger friend base than I would have ever imagined without being any sports. And what advice would you give to upcoming potential professional players? I would say structure. It's really, really important that you have structure to your day. If you want to get out of bed at nine o'clock and start practicing, that's absolutely fine. But structure your day. So you practice maybe for an hour, an hour and a half, structure what that practice is. I'll take Counter-Strike as an example because it's something obviously that I know in and out. If you're going to practice your aim, then do that for 30 minutes, then do something else, then perhaps maybe practice your reactions. Then do something else, review a demo of something you did previously. Take a break, ensure that you're then going out, going out for walks, get some fresh air, come back, start again.  And then when you look back and you think, well, I'm not improving, I must be bad. It's not that. It's that the structure that you're placing is bad. You can structure it correctly. It's like learning at school. You don't learn at school for doing it 10 hours a day. It's structured into small sessions and then you have a break and then you have more sessions. It's the exact same process to get your brain to learn and this have this muscle memory. Just structure it out, take breaks and always, always review everything you're doing and think, how can I do this better? Okay, because if you just keep doing it the same way, you're not really improving, right? Well, this is it. And this is what Albert Einstein said, that insanity is doing the same thing over and over again and getting the same results. So don't do the same thing over and over again because you are going to get the same results. You need to adapt and to change and try something new. And if you're playing for a team and you're in a practice game or a scrim or whatever you call it, depending on where you're from, those games aren't to win. It's the biggest mistake that every team makes. They go into these practice matches and they want to win. It's not there to win. It's there to learn. The only games you need to win are the league games and the official games. Everything else doesn't matter. It's all a learning process. Sure. And it kind of reminds me of being a triathlete and a swimmer for years. And I would go to the pool and I would focus on a session.  And I would just really focus on these little minute things. And so it sounds like that's to become better as a player in East, or you could focus on these, break it apart and focus on these small skills. Is that right? Yeah, absolutely right. It's really important to break it down and to focus on those smaller elements. I think it will take counter-strike if you're playing deathmatch and you're practice with guns that you don't normally play with. Everybody will practice with the AK-47 or the M4 or the Desert Eagle because they are the standard sort of guns that everybody uses. But there'll be a situation where you need to pick up a weapon from perhaps an enemy that you're not used to playing with. What are you going to do with it if you're not good with it? So do something different. I'm sure that other people's weaknesses are your strengths and you will see much more improvement from doing that. And also in anticipating other movements of the other player. Yeah, it's really crucial and the only way to do that is just by keep playing and reviewing what you're doing. So why did they do that movement? What could you do differently? Should have you have took your time? Should have you have rushed further? There was some utility that you had that you didn't use. Again, another vital piece of information. If you're in counter-strike, if you've died and you're dead and you still had utility, well then why? Why aren't you using that to support your movements or to support your team's movement? It's not all about you. It's a team game. You've got some utility but your friend hasn't used it to their advantage. Maybe they have something you don't. Maybe he has a sniper rifle. Well then let's prioritise your teammate. It's a one-shot kill if he's using the AWP. So that should be our absolute priority to get to use as our weapon. That is our big weapon. Let's use our utility to support him because he will get those kills and ultimately we win the round. And you win rounds, you win games. So we have another question from the book. Does everyone have a role in gaming teams? For example, someone on offense and another on defense? Yeah, everybody has a role. I don't think there's too many games that I can think of that someone hasn't really got a good role. Whether those roles are variables and they will move and shift, I think there's a possibility, but in Counter Strike they tend to, and League of Legends, you tend to have one specific role that you concentrate on. And I would say that if you don't know what that role is, you need to review the style of player that you are. So again, taking Counter Strike, if you're somebody that's really aggressive and you like to run and do things really fast, well then you need to be an entry fragger.  If you don't mind sitting back and taking your time and you have patience, well then maybe you should be lurking and waiting for that enemy to come to you. Every role is important. The best thing you can do is find out what role you're best at and how that then fits into another team. Sure. And I know you have a coach to what makes for a good coach? Support.  The coach is if you have a five man team, he's the sixth player. He is on the team, he is supporting the team, he is helping them and guiding them. He is there to show and to show you the things that you've missed that you didn't see. He can review your demos for you, review your gameplay, maybe help you with communication issues. The coach is a sixth player. He's just not on the field when you're playing those games, but he's just as important outside of those games. So tell me about European eSports right now. I know that Europe has been hard hit by COVID. How is European eSports doing now and what is its future? So European eSports is doing really well. I think we have a fantastic talent pool, probably one of the best in the world in most games. I think the biggest issue we face in Europe is funding. Lots of businesses are very reluctant to invest and when they do invest, they invest much smaller amounts than the United States, for example. And that is something that's been proven recently with League of Legends that the LCS has huge investments and huge money, but no talent pool, whereas the LEC has huge talent pool but no money. And that's a big problem we have in Europe. It's where that funding is coming from because businesses seem to be reluctant to invest currently. Do you think that that's changing or will change in the future? I think it will have to change as more global businesses get involved who are willing to invest in anybody in Europe or in the United States because they can. They have to join and get on the boat or they're going to be left behind and that's the choice that they're going to have to make. So I think it will change and there's TV rights and deals start to come into place. That will change. And I'll let you tell us how people can find you and get in touch with you and then we'll have to wrap it up. Okay, so on our website team7am.com or our Twitter at team 7am. They're probably our best socials that you can kind of reach us on and then you can join a discord. Feel free to come and say hello and yeah, engage with us. Fantastic. Well, John, thank you so much for being on the wide world resource today. Thank you. All right. And so, thank you to our viewers who sent in the questions and thank you for joining me. Make sure to tune in next week. My guest will be Dr. Christian Kusmetsch, an Austrian neuroscientist. We'll talk about new technology applied to training esports players.


Everybody forced here. We've got 2023 Bowman Sterling Baseball 4 box number 7 pick your team style Conrad with the Dodgers Daniel Y with the Braves Daniel F Mariners Darren C Marlins David L Nationals Davis Red Sox Edward has the Pirates Eric C Reds Gabriel C Orioles Diamondbacks Gregory M Royals Jays Jacob H Padres Jason H. You're sorry Jason R. Excuse me has the Mets Jeff D. A's John W. Tigers and Rockies Kevin W. Cubs leeway with the Rays Mackenzie has the White Sox marked a Guardians Matthew W. Astros Megan has the Twins Nicholas Rangers Ryan B. Brewer's Rylan has the Giants and Phillies Scott S. Yankees Shandy W. With the Angels and Steve G. Has the Cardinals. Good luck everybody Good luck It's even more Kenzie a big hit She got the White Sox Walkie's too good. All right. Good luck everybody First up is gonna be Sterling Tech Rockies rookie Ezekiel Tovar You go Tovar for the Rockies and the Sterling Tech auto first up is Ricardo Cabrera Reds to 150 Ricardo Cabrera for the Reds I don't remember any Anything big for the White Sox from earlier Could I sang a rookie to 199 is a Drew Gilbert the Stroze followed by a Reggie Crawford bass on it for the Giants Beck and Jackson holiday. Hey, what's up Gunnar? Jones Mechia auto Gabriel Gonzalez Mariners you go Mariners Whoa. Oh next your catcher Yes, I was over I said as soon as I was over I jinx them Orange here auto to 75 Jason Chorio. Congrats guardians every go great hit for the guardians Really? Yeah on the way Raise me the same time Jordan Beck for the Rockies you probably told Dylan that every day of his life I can week Dylan and I heard that all the time. Oh, yeah, call the 50 Jordan back Rockies auto Dodger Samuel Munoz at 99 Hey, it's a good way to do it. Yeah, no, I know we all know somebody who was like a sibling and they're like either Like nine or ten years younger or something than the next closest and you're like what?  I was the same way. Thank God. I had Dylan Not wrong being a girl dad, I must have talked to Yoshida Refracture auto Roger Arias go to the Yankees the 150 Yeah, I was I was looking Kenzie. I was looking for your Lakers magic tickets It's like I gotta see LeBron play at some point in my life in person It's not gonna happen tomorrow. It's not gonna happen tomorrow. Yeah Used to go a lot though Right.  You're gonna get some clients for the game Deanna Jorge Rocky Zotto Richard need the company card for Gives the Cowboys this week. I'm gonna say I feel like it's gonna be close. I'm gonna take Eagles though Hello, they can sports guards Sam. Look who's in chat Guy refractor to 150 auto Christian focaro for the Nationals Chappelle was here. That's That's what's up. I'm trying to go see Nate Bargazzi. I'm trying to go see blink next year Valkyro for the Nasser factor auto Kim Collier to 100 Reds I Twences Yasser Mercedes Why is the last name capitalized Dude him and Steve need to figure it out him and Steve and Greg and Sam. They all need to get it together Pull it together boys. Pull it together. Mr. Juan sodas now. So do you get traded? Who's he getting traded? It's a 99 rookie is three Ruiz going to the A's Hello, jaker and then an auto of Daniel Montecino for the Padres Free yelling emphasis, yeah, I'm gonna find some sort of software where I can Filter out certain words that Sam says you guys can't hear shticks anymore There's a red right there How about a red? How about a red of Drew Gilbert for the Astros three of five Astros red three of five Gilbert and an auto of Anthony Gutierrez for the Rangers Texas Meyer Crawford, that's a few shut Jackson choreo to 75 nice numbering there for your Brewers and A Cole young base auto for Seattle my place on that tomorrow What spider-man to? Opulence auto here. Come on now and it's Alex Ramirez Mets Opulence auto number to 99 Jordan Loller dude, we should take the whole shop to a water park Push Jake down the steep slide paint dry There's a mini diamond to 150 Jackson holiday Orioles And auto for the Dodgers rained on cone. You know I did an outing last year What we should do this time is just have a day I Shungroop in Miami Sean can Sean can swim to the Bahamas if he wants to That is an auto of Tucker Toman for the Blue Jays Gold coming up here Two gold back-to-back gold first gold is Jackson holiday to 50 Orioles Sterling holiday gold and gold auto young kill Fernandez Rockies great mini box 27 to 50 young kill Fernandez auto and or Mars is a pistols fan many diamond rookie to 150 is Vaughan Grissom for the Braves We imagine Mars is better auto Joshua by as Cardinals. We got jingles How low finally had a good game last night That is kind of weird Kenzie I Pretty young I know I don't have some as long as I can like have memories pretty much auto Stanley Munoz for the Dodgers Like they're like one of the same. I learned how to surf before learning how to ride a bike honestly Which is very weird. I don't know how to surf and I was five or how to ride a bike and I was six Yeah, oh really? Yeah, big big time server really? Yeah, that's cool big time sir never Yeah, it's 100 Brooks Lee for the Twins And autos at in simpulino for the Red Sox Hello our Mars Mahalo. All right, let's do a recap here Recap Reno. All right number to drew Gilbert Vaughan Grissom Jackson holiday Brooks Lee is equal to bar the tech Insert cam Collier Asturi Ruiz Jordan Groshan's Jackson choreo Jordan Beck Jackson holiday again to 50 this time for the Orioles Red drew Gilbert to five for the Stroes. We had autos of Edinson Polino Samuel Munoz Joshua Bayez Tucker Tomon Rain Don Kohn Cole Young Anthony Gutierrez Daniel Montecino yasa Mercedes Dion Jorge Mikey Romero Gabriel Gonzalez Reggie Crawford to 150 Vaquero Roger Garry us Ricardo Cabrera to 99 Munoz Alcimiras as well gold to 50 young kill Fernandez and orange to 75 was Jason choreo one of the guardians Good four boxer there. Thanks everybody moving on out of number eight