Godwin's Law. There, I said it myself. I don't want anybody to pretend like they did not see that coming. So one of the most popular hobbies for pundits, journalists, and political science experts in the months leading up to the 2016 US presidential election was trying to identify the reason that Donald Trump was pulling down such impressive numbers, despite the fact that in many obvious ways he was a highly unusual candidate. As usual, the truth is obviously more complex than that. He won for a whole bunch of very different reasons, many of which we simply will never know. But Trump's victory does mark another data point in a recent trend towards populism, a social and political strategy which according to many experts has become widespread. Presidential candidate Bernie Sanders, the Swedish Democratic Party, the Brexit referendum, the Tea Party, the Spanish Pidamos Party, Greece's Golden Dawn movement, all of these have been described as manifestations of this populist trend. Populism is a term which describes political platforms that are tribal and anti-elitist, invoking some narrative of the common people versus the political ruling class. Who counts as the common people changes depending on which voter base is likely to be swayed, but who they're not is usually made abundantly clear. Populists paint themselves as fighting for the little guy against some uncaring or ineffective ruling elite who wield power from on high with no concern for the light of the everyday citizen. In exchange for the support of said citizens, populists promise to append the existing political order, sack or displace those elites, or worse, and give power back to the people. Picture someone leading a crowd that's carrying torches and pitchforks, that's populism in a nutshell. Now sometimes that's exactly what the doctor ordered. It's pretty much the basis for every single political revolt in human history. The people being ruled get fed up with the people ruling and then follow some charismatic leaders who promise to do better. And sometimes they actually do. However, there are some conditions that are necessary for that strategy to work, and they're not always closely tied to the quality of leadership. First, in order to sell this idea, one has to assert that things are seriously screwed up. It's hard to assert that the ruling elites or outsiders are responsible for the deplorable state of the nation if things are actually pretty OK. In many ways, this largely depends on where you are in a society and what you can be convinced counts as OK.  Although it's definitely true that governments can affect those things in significant ways, it's not always government's fault when they go screwy and storming the capital with pitchforks and torches isn't always the best way to fix them. Second, populists have to represent the current establishment as being somehow insufficient, either inept or ineffective or uncaring or, ideally, all three. This is usually pretty easy. Scapegoating the people in charge for our problems is kind of just a fact of life. Thanks, Obama. Third, populists suggest that drastic change is necessary to fix that government problem, that a strong outsider, someone who isn't a member of that elite, needs to get in there and shake things up to disrupt the status quo and in so doing, give the power back to the people. In short, what has two thumbs, unlimited executive power, and it's going to make everything better, this guy. Again, these things don't necessarily have to be true for a populist to gain support. It's just the general shape of the story that they have to sell. It's obviously easier in some situations than others. For example, populist fever hasn't really caught on in South America because a number of those countries did elect populists into office a little while back and nothing's gotten better.  But let's talk a little about some of the undertones of populism, why its use is frequently derogatory and why very few people will admit that that's the strategy they're going for. Historically, an effective way to convince normal people that things are super bad and it's the government's fault is to play to more primal, less rational modes of thought, things like mob mentality, fear and anger. Most politicians will appeal to your emotions in one way or another. But frequently, populists will hammer on baser instincts to whip their constituents into frenzied indignation about the status quo. First, the scarier things are, the more clear and present the danger, the more pressing the need to unify under whatever sweeping changes the populist is promising. When you're trying to get a large group to demand your leadership over that of the establishment, it's really helpful to play up the desperate need for immediate action. If it looks like someone's driving your car over a cliff, your standards for who you'd rather have in the driver's seat get lower the closer you get to the edge. Second, nationalism serves as an effective tool for fanning the flames of discontent, contrasting some idealistic vision of the country's true glory with the realities of the difficulties that it's facing and painting the establishment as the primary barrier between them. It doesn't matter if that vision is actually feasible or sustainable. It's only meant to be something shiny that the people in charge won't let you have. How dare they? Third, tribal rhetoric is very useful for galvanizing supporters into the people the populists can claim to represent. It's kind of hard to get a mob going if everyone's thinking about how diverse they are and how they all want something slightly different from government, but give them a flag and some other to focus their attention. These simple rhetorical tools are devastatingly effective at binding and motivating a group of people to demand new leadership by any means necessary. But they have some, shall we say, problematic side effects? This guy wrote the book on populism, and he's a pretty good example of what happens when it goes bad. Now, these are just the unpleasant implications that linger about this broad category of political strategies. They're not requisite, and they shouldn't lead you to the conclusion that all populism is bad. I mean, we the people. But the growth of populist politics in several countries in Europe and the United States has a lot of smart people wondering what's driving it and where it's likely to end. Is fear of terrorist groups making inflammatory rhetoric more appealing to voters? Is economic stagnation and disruptive globalization making more people feel dissatisfied about the economy? Are a large number of progressive social reforms and an increase of immigration worldwide causing some sort of backlash among more traditionalist voters who feel threatened by those things? Is the measurable ineffectiveness of non-rich people on government policy causing widespread feelings of disenfranchisement? As with President Trump's success, these are not questions with simple answers. But knowing about populist politics and how they work might give you some insight to know when they're being used on you and the dangerous places that they might need. Why do you think populism has become popular in the last decade or so?  Please leave a comment below and let me know what you think. Thank you very much for watching. Don't forget to blah, blah, subscribe, blah, share and don't stop thunking.


Eh, I'm looking at Yeez. Wanna watch this movie? Ooh, that's a hot mug, guys. Hey guys, this is my review for Belfast. This is a film written and directed by Kenneth Brennan and it stars a lot of very prominent Irish as well as some English actors. I was hearing a lot of praise and hype about this movie last year. Unfortunately it was really hard to kind of try and see anything we do to theater lockdowns and blah, blah, blah. Finally did just go out and see it. First off, I'm actually quite surprised at how short it is. This has got to be the shortest film that Kenneth Brennan has ever been a part of. Considering the man basically tried to put every single Shakespeare play to film, even succeeding in making a Hamlet movie over four hours long, the fact that this is barely over an hour and a half, this does take away from the film's direction but I'll get to that in a minute. This film is essentially a time capsule of a very short span of time, about a year of 1969 in Belfast when the stripes between the Protestants and the Catholics were quite high. Now from the very short history lesson I got from my wife, majority of Ireland is Catholic except for Northern Ireland which is Protestant because they still wanted to stick in with London. Protestants were quite harsh to Catholics and vice versa to the point where if you weren't with either one, you were an enemy of both.  We just want to be friendly with our neighbors.   The ideology of religion in a nutshell, kind of, that's a topic for another day. I'm not touching that with a 60-foot pole. The soundtrack is so good. I was just tapping my foot to every single tune in this film. A ton of little pieces of history throughout this film in terms of just the living style of Ireland at the time. Going back to the narrative complaint I kind of have is that there is this inner dilemma with this family of whether they should stay in Belfast or not considering the rising escalation and violence that's happening around them. But the torn between moving to somewhere new and love and know and have so much history in the area that they are in.  And that is it. That's essentially the strife for this film. Otherwise, there isn't much exactly that happens in this movie. It's very much kind of a life in the day of this kid, just seeing what happens with his parents and everyone around him. A film that sort of kept coming into the back of my mind was Kess, a film directed by Ken Loge. I think actually at the exact same time that this film takes place. While that film is a lot more grimmer and a lot darker and a lot more depressing than this movie is, I did feel a few similarities in terms of how this story progresses, its aimlessness of it. It's more so of a capsule in time rather than an actual narrative. Also, I do like the cinematography in this film. While it is pretty much all black and white, I did like some of the static shots. Some of the shots where they have people kind of just in the corners for no real reason, but oddly enough, it works pretty well. I do like this film for what it is. It's essentially just kind of trying something different, especially from what he's used to doing. I can't imagine this film cost a lot to make in comparison to the other projects that he and the cast have worked on. And everyone does a really good job. I think the performances by everyone is quite solid. But there is this definite issue with this film is that once you watch it, you're just going to forget about it. You're never gonna wanna watch it again. There doesn't really that much of a draw to it to make you wanna watch it again. Just a fleeting thought. It goes through one ear and out the other. You might think about it for a few minutes, but afterwards, that's it. Could this get nominated for things? I can see that possibly, but at the same time, it's one of those movies that you know will get nominated for a bunch of things, but it won't win anything. The only thing I could think of that it has a slight chance at, maybe might be cinematography, that's a stretch in itself.  So my final rating for Belfast is a four out of seven. I'm happy that I finally got to see this movie and I like that it's so short. But I guess I was expecting just a little bit more kind of direction to it, considering how many people were praising this movie. Those are my thoughts about this movie. What did you guys think? Let me know in the comments below. Otherwise, guys, I hope you enjoyed this review. If you did, leave a like and if you're interested in more, subscribe. Otherwise, I'll see you guys next time.


Hi everyone, Joe for Jasper's Case Breaks.com with 2019-2020 Panini Hoops Basketball Premium Stock Edition, Cellopack number 98, and we're giving away the final eight spots in that absolute basketball break, which is coming up in a separate video, the next video. Big thanks to this group here for making this happen, I appreciate it. And all 30 teams are in. So two dice rolls. First one will be for the break itself. Second dice roll will be for the giveaway. First dice roll, six times, one out of five. Names and teams. Two. Three. All right, one out of five, six times, four the teams. Two. Three. And six. All right, no trade windows here, but here's the first half of the list right here. And there's the second half of the list right there. This is 2019-2020, so the Zion, John Morant here, et cetera, et cetera. So there's Dennis with the Grizzlies here. Did I miss the Pelicans, and then Rosario Pelicans. Could there be some surprises in a single filler pack? Yes, we have seen it happen before. Of course, the main point of this is try to win those absolute spots, but sometimes it could be a nice little cherry on top. All right, so there's the final printout right there. Let's see what we got here. And Sexton, Michael Kid Gilcrest, nothing too crazy there. What about the bonus pack? Bonus pack, Batum, Brooke, and Daniel Gafford. All right, nothing too wild there, but let's see who's going to win those absolute spots. Let's flip back over here, gather up everyone's names. New dice, new list. Let's roll it and randomize it five into two, seven times. So it's top eight after seven. Good luck. One. Two. Three. Four. Five. Six. And a seventh in final time. Again, top eight after seven. So from eight on down, no good. Sad times. Very close faith. No, faith's got it. Sorry. It's top eight. So no faith, you're in. Brandon's sad times. Very close, no cigar. So from nine on down. Thank you for giving this a shot though. I appreciate it. Eight faith, you're in. Michael Robinson, Zachary, Dennis, Kevin, Michael, Brian, and Arthur King. Congrats to the top eight. We'll see you in the next video for that absolute hoops break. Chaspyscasebreaks.com. Bye-bye.


This episode of Android Invasion is brought to you by Mountain Gox and BitPay, Bit-Pay and Mezzy Grill and Carpe Veeam. Red Magic Gupertino, we have a problem. It's spreading. We're losing control over the entire system. We're being invaded. Invaded by air. There's nothing we can do, it's too late. And welcome to another episode of Android Invasion, post-hurricane Irene. But luckily nothing too bad happened here. Our condolences and thoughts go out to anybody who was affected by it.  So condolences go out there. Today we're going to be talking about a little quick Android news update and then we're going to get into some, a couple of Wi-Fi applications. Mostly they're concerned with Wi-Fi security or security auditing or as it's also called penetration testing, which is mostly for network security folks. But let's get to it with the Android news update. First we have that Android is now the most targeted mobile platform for malware, which actually makes sense compared to Apple's platform, the iOS. Apple is very restrictive and very controlling about what could be released on their market. They do a code review process and if they don't like one thing about it, they're going to reject it from the market. Android is completely different in that it's a completely open market. So with an open market, there are going to be some inherent risks. People are going to try to take advantage of that. And basically what's going on is they're using social engineering techniques to get you to download these malicious applications. A lot of times they'll copy another developer's work, release it as their own and it has this hidden code in there. And a lot of times people don't know this, but you could download one of these malicious applications and you didn't have to run the thing for it to actually do bad things. It could use what's called a state in the phone, something like receiving a phone call, sending an email out, screen turning on, you name it. Any one of those things could trigger that malicious application. So just because you downloaded it and did not run it does not mean that you're safe. There's some bad developers out there that they're pretty well known for releasing applications like this. I'll just go over the list very quickly. It's Magic Photo Studio, Mango Studio, which saddens me because mangoes are my favorite, so they're tarnishing that name. We have ET Teen, which I don't know what that means, BeGoo, Droid Plus, and Gloomobi. These are developers that are known to release applications under the guise of somebody else's legitimate work. They just keep the same name. Obviously, you'll see that the developer is different, so do your homework, do your fact-checking. You could use services like AppBrain from the Android Market. They have reviews on top of the regular reviews from the Android Market, which would be safe. And then another way is that they send out unsafe web links. You might get that in some of your SMSs or text messages. You'll see it's a random weird number that you never seen before with a weird URL in there. You'll be surprised. People actually do click it. So if you get one of those, don't click it. It could be some sort of exploit or something to get a malicious program installed and we don't want that. And then I just wanted to give you a, they also have, if we could pull that up, there's a new mobile malware for this quarter. It's a pie chart. And just to give you an idea to the breadth and just how, what kind of dominance Android has for these malware guys, it's over 60% of that market. So only download apps from trusted sources such as reputable app markets. Remember to look at the developer names, the reviews, and the star ratings. Always check the permission that an app requests. If you're downloading a GPS program and it's accessing your phone book, that's a red flag right there. There's no reason for it to access your phone book unless it has a sharing function where you could text somebody or something like that. Another thing is be alert for any unusual behavior on your phone. A sign that your phone could be infected might be something like unusual text messages that you're seeing that you didn't send out. That's usually a good indicator. And then download a mobile security app. There's a bunch of them that they'll scan the phone and they'll look for malicious things. And anything that's known out there, what they do is they create a signature signature this way if that tries to propagate or spread throughout the Android market. It'll let you know immediately upon downloading it or intending to download it. There's actually a couple. Just to give you an idea of some of the stuff that's out there, Shaki has a spacebar. And then the Skype machine shot. But if you do, there's a couple of apps out there. One is a calendar app. It's called Android JMSonus.A. That's what it's classified as in all those mobile security apps. And it's a calendar app that basically sends a text message to a premium number, like those premium 900 numbers. So basically you'd be charged an exorbitant amount from some random Cayman island or something like that, which is not cool. There's one called SMSMeCAP, which is a fake comedy app, and basically it sends malicious text messages to everybody in your address book. And there's also Droid Kung Fu, which is a malware that's capable of installing its own software and updates, obviously not good because then it could just run any code that it wants to. And then there's also a DRD Dreamlight. It's capable of sending data back to the attacker, so it could collect some information and then it could literally send out your phone number, your contacts, all that bad stuff that nobody wants. And then also in the news is that BlackBerry is said to get some Android apps. They're planning to release the first quarter, I believe it is, of the U.S., something called QNX Phones. What's special about these is that it's going to run both BlackBerry and Android apps. So that's going to be pretty cool. Android has hundreds of thousands of apps in the market. BlackBerry, just my personal opinion, has always been lacking in that department. They have one or two good things in there. And there's also talks about a possible update to the BlackBerry Playbook so it could indeed run Android apps. I think they're doing this because of the declining sales in the U.S., although internationally it is picking up a bit. Also Android is now the leader in ad impressions, which is pretty awesome. We also have pie chart on that, which is pretty awesome. Android has surpassed a total number of mobile devices in the actual market segment for selling their phones, which is good. But what's also good is to see that it's profitable for anybody who's writing applications and usually they're free applications and they're supported with ads. This way we don't have to shell out a couple of dollars every time we want to try an app. What a lot of developers are doing is they're combining the ad sales and then they have a donation or premium version that you pay a couple of dollars for, which was interesting as well. A popular game like Angry Birds, they generated over a million dollars a month just from ad impressions. That should motivate a lot of developers and a lot of people to use the Android platform versus the Apple iOS platform. Then I'm sure you heard of it already, Google buys out Motorola Mobile Division for 12.5 billion dollars, which is interesting as well. Some of the shareholders sued Motorola because they thought that wasn't enough. I think 12.5 billion dollars is more than enough. It should be interesting to see how this plays out. What kind of consequences or what's going to transpire for Android in the future from this, because Google has in the past done exclusive phone contracts with different manufacturers, most notably HTC and Samsung, so we'll see how that plays out in the future. Then also, there is a gentleman that has recorded nearly 20 hours of Android developer tutorials, videos on how to program for Android, how to make apps. He has over 200 videos. They're all shot in high quality HD. If you go to tinyurl forward slash Android Dev Tuts, it's on the lower third there, so you could copy it down. It's going to link you to the Droid project and there it's going to have all the information on those videos. Very big thank you to Bucky, aka the new Boston, and MyBringBack. If it weren't for them, we wouldn't have this. I'm definitely going to be checking them out. If you're interested at all in developing for Android, definitely check it out. It should make it way easy for you.  First up, we have Mt. Gox, the largest exchange for bitcoins. If you don't know what bitcoins are, Google that right now. Bitcoins are the new thing. They also have the Mt. Gox mobile app on the Android market. They're supporting 16 currencies now, something crazy like that. And they have the UB key, which provides two-factor authentication for your password. This way, it's nice and protected. And it's also provided by BitPay. That's bit-pay. They are the merchant processor for bitcoin. They were the official processor for the bitcoin conference that just passed two weeks ago. It's super easy to integrate into your website. You could actually accept payment in bitcoins and not know anything about bitcoins because you could cash out immediately in dollars, which is pretty awesome. Then it's also provided by MezzyGrill.com. It's where authentic Mediterranean food meets modern flavor. I finally had the pleasure to eat over there. Amazing food. Really good. It's a couple blocks south of Columbus Circle at 8th Ave and 55th Street right here in New York City. And there are worldwide franchising opportunities available. And Carpe Viem sees your market, say it with video. Charlie works closely with you, beginning to end to ensure that your video makes an impact. Anything that has to do with your image and who you are and what you represent as yourself or a company. Everybody is going to work with you. They do amazing work. And it's video on the web that's ideal to engage your viewers. So very big thank you to all of our sponsors. If it weren't for them, we would not be here. And now to talk about what we came here to talk about. I have some Android security apps that I want to go over. It's basically two, the two main ones that I want to go over. And it's pretty cool. It shows you a little bit about security and also gives you a wow factor. Because most people don't know that you can actually do this with Android. And what they are are penetration testing tools for Wi-Fi routers. And basically the way that they're able to work is there's some sort of flaw in the way that the default SSID, the SSID is when you're looking for a Wi-Fi network, that's a name that shows up. Basically it's something cryptic, if it's default one, or I might say, you know, like Linksys or Netgear, Router, something like that, of course, you know, you could change it. Now, the flaw comes when you just hook up a router and you use the default SSID, that display name, and you use a default generated what's called a WEP key. WEP stands for Web Equivalent Privacy. And it's actually very, I'm not going to say insecure, it's more secure than nothing, but it's pretty insecure that it's very easy to crack.  And if you have one of those, there's our applications that can actually see what the default is. And if it's the default, sometimes it's able to calculate what the correct key is for that. So this is a great way to test your network security at home. Make sure that you're not using an insecure password or a flawed password that's easy to crack. And also just as a general tip, nothing to do with Android, if you're at home, use WPA versus, you know, WEP, WPA is more secure. It's a little tougher to crack, you know, depending on how simple the password is. It could still take a few minutes, but if you have a decent password in there, it should take considerably, considerably longer time for that. So let's jump right into it. So we have RouterKegen and WPA Tester. Now I know they basically do the same function, but what I want to do is I want to go over first with WPA Tester, because I know that this didn't define anything, but RouterKegen did. So basically it has a disclaimer, you know, don't do this for any illegal purposes.  It's not going to work from what I find. And just hit continue, and then it's going to allow us to scan. So what this is doing, it's scanning the different SSIDs that we have over here. So you'll see that most of these show up with the red lock on there. They're WPA. So this application is not capable of testing them over here.  We have television over here. Oh, there we go. So let's hit scan again. It did find one. I found the netgear. But why would you put the ads on there? You see, this is something that developers need to look out for, because that is not cool. All right. Yeah, so the ad is hiding. It's literally hiding the scan button. Like, how are you supposed to work with this? That is just redonkulous. Okay. So here's the netgear. I actually found two. So here's the netgear. We have the green light that it's unlocked. That's because it has no password. So silly me. So yeah, so if it has no password, or if it's actually something that it could muster a connection to, it's going to show up in there. And so that shows up as a green. Now let's go to, so you could also do a manual mode where you're specifically targeting a specific brand of router, like D-Link and all that. Again, this works only with WP keys that you're using the default SSID as well. So now we have one called Router Key Gen. Router Key Gen works similarly. Sometimes it's able to pick up a couple of different ones that did not show up in WPA or faster, trying to pull up. We were able to pull one up earlier, but it's not showing up. Just wanted to show it to you because it was actually able to get the key for these people's Wi-Fi. It's not showing up the magic of live television. Okay, here it is. So we found one. It's TNRA3. The signal is very low. We have a green bar over here indicating that it is good to go. So let me just put this over here so you guys can see that much more clear. And then if we actually click on it, it gives us the password right there. It's in ASCII of course, so that's 0 through 9 and A through F. And I could literally save it to my SD card so I could pull it up later. I could share this. I could send it to my neighbor and say, hey, look what I found, email it or what have you. And that's it. That just shows you how easy it is to get somebody's Wi-Fi password. If you're in a densely populated city, just give me an example. I saw this work in Jersey City. We're here in New York City, so it's densely populated as well. You'll get some luck in finding some unsecure ones, but just download them. It's router, key gen, and WPA tester. Walk around your home and see what you can find. If you do find one, it's definitely a wow factor that you can show your friends. Interesting what you can do with Android. There's also a review I'm going to do on another application that is supposed to be released from DEFCON, this past DEFCON. Somebody did a similar suite of penetration testing tools, much more advanced than this. Definitely be interesting to play with that. It's supposed to make it easier and accessible for anybody to be able to do it. Of course, there's always White Hat, which is usually deemed anything good, positive, beneficial to others. There's Gray Hat, which is sort of in the middle of that. Then there's Black Hat, which is usually malicious intent. All of these are released under the guise of White Hat tools. Use them as such. If you try to do anything illegal, if you actually break that password and you get in there, they're going to be legal repercussions for that, so check your local state law for that. That should do it for this episode of Android Invasion. Until next time, we're going to do some quick tips and tricks for the next episode, some stuff that most people don't know, or they're uncommon tips and tricks, so it should be a fun episode. We'll see you next time. Take care, guys, and v'en voyage.


For more videos on people's struggles, please subscribe to our YouTube channel. Tensions continue over the Russia-Ukraine border as we enter into the year 2022. There have been warnings of war and conflict from both sides, and it is important to understand why has this region become a flashpoint. Russia has mentioned its red lines with NATO's eastward expansion towards Russia. Newsclick's editor, Prabir Purkayashta puts the flashpoint between these two countries and NATO in perspective. The two things which are combined to produce what we are calling the flashpoint Ukraine. Ukraine represents both of these, the fact that it is going to be a part of NATO, and the fact that if Russia does not prevent NATO marching to Ukraine borders and possibly positioning nuclear missiles on its borders, then Russia will be under the nuclear missile threat of NATO. And this is something Putin has said he is not going to accept. This is Russia's existence and therefore he is not going to accept this. Now if you go back a long way, you will realize this is exactly what the United States said when Soviet Union then in 1962 had put missiles on Cuba's borders. Of course, you can talk about this was in response to what the United States has done, putting missiles in Turkey, in other places, but leaving all of that out, Russia's response at the time was we will not allow nuclear missiles so close to our borders and therefore this is a flashpoint. Today what Russia is saying is almost virtually repeat of what was said at that time, that Cuba, if that was a flashpoint, Ukraine is now their flashpoint and the reasons are identical, putting nuclear missiles on its border, threatening it with missiles, missile strikes and here we have to go back to what was the other issue which is that the US has also withdrawn from the intermediate missiles, what is called the intermediate nuclear missile treaty which limited the range of missiles that could be used, which could be positioned and therefore that range is the range which is crucial here because it is not short range, it is middle range and if Ukraine borders are used, as also earlier Romania's as well as Poland's borders have been used or territory has been used, Baltics is where also missiles have been put but not these range of missiles, then yes there is much greater threat to Russia, a possibility of a first strike and taking out the second strike, retaliatory strikes with anti-missile batteries, the batteries which are already being positioned in Poland and Romania, if similar batteries are put in Ukraine then surely it's a threat perception which becomes much more for Russia and that's what the reaction we are seeing. Let's take a deeper dive and look at the history of NATO's eastward expansion and also put the lens on why Russia has raised the issue of the missile batteries on Russia's borders in the Baltics, Poland and Romania. How are these linked to the US withdrawal from the intermediate ballistic missile treaty? What is the difference when NATO troops and missiles are in Poland and Romania and when they come up to Ukraine? The red line drawn by Russian President Volodymyr Putin needs to be understood in this particular context. If we look at the NATO expansion after really the fall of Soviet Union which was 1990-91, at that time Soviet Union was dissolved and essentially Russia became the state which inherited the treaties, the nuclear treaties, other treaties which Soviet Union had signed and at that time there were various promises made, promises made to Soviet Union when Gorbachev was the leader which was followed up to promises made to Yeltsin as the President of Russia. All these promises were that NATO would not march east, in fact what James Baker had told Gorbachev, not one inch beyond Germany's current borders. Now that is the promise which were reiterated by all Western leaders. Now documentary evidence is available, that is the security archives which documents all of this, files various freedom of information act requests and they have documented a lot of these assurances which were given which were steadily not observed. We saw marches of NATO eastwards not once but twice thrice and the latest expansion is Ukraine is also Georgia. Both these expansions are on the offing and there is also talk about Finland as well as Sweden. Both of them are not NATO members also being brought within NATO. So this is the background by which NATO which was supposed to be not Atlantic Treaty which brings the United States to Western Europe. That was the purpose getting Western Europe under essentially the US umbrella so to say but if you remember the Intermediate Range Bezile issue that was something Western Europe was much more concerned about because they felt that any war between the United States and Soviet Union will be fought in Western Europe. So Western Europe will be the one which will therefore come under the Intermediate Range Beziles fired by Russia by Soviet Union and therefore they had a big stake in the Intermediate Range Beziles being actually banned not being used and that's why it was a land-based treaty it was not a sea-based treaty. Sea-based Intermediate Range Beziles were accepted but land-based missiles were not. Essentially it was in the interest of Western Europe and other European countries not to have nuclear weapons play in European heartland. That was the whole issue but once NATO prevailed shall we say in their view they are the one who won the Cold War though the reasons of that are different we will not go into that today why Soviet Union imploded when it did the reality of it is this is what led again to the revival of the talk that Intermediate Range Beziles can now be positioned and can target Russia and this is the reason why Trump raised the issue of Russian missiles which were a violation of the Intermediate Range Bezile Treaty Intermediate Nuclear Treaty INF Treaty but instead of raising it in the fora which is the treaty itself there are dispute resolution mechanisms he decided to walk out of it and why he walked out of it becomes clear when you look at the actual missiles that would be talked of Russia they claimed was violating it because they're using something called they called SSC-8 missiles which are basically a combination of a land or a sea-based missile the US actually has exactly identical missile they introduced it first basically missiles which can house both cruise missiles which are offensive missiles as well as defensive missiles which are essentially missiles are anti-missiles they shoot down opposing missiles which come but the battery that fires it what is called the Aegis batteries they are essentially ones which can house both missiles and they do it's just a container and which missile is fired depends on what is inside the container so effectively that Aegis battery can house and this is originally something which was sea-based can house either cruise missiles all it can house also anti-missiles at which missile is a choice that the country makes which puts a battery now that missile was converted to a land-based missile and is the one which has been positioned in Poland and in Romania these are the two places that these missiles were shifted and Russia at that time itself said that this are essentially offensive weapons and they also can fire cruise missiles so this is also this a violation of the INF Treaty but that is the whole issue it is to position these missiles that it appears now that Trump wanted to walk out of the INF Treaty and this is something which it's interesting which Biden has also continued so the question of what happens in Ukraine is linked to the intermediate range missiles the INF Treaty the US walking out of it and now installing these missiles in Eastern Europe now my only question is this is what Western Europe actually protested earlier they're very unhappy but this is happening now that the eastward march of NATO is taking place they possibly feel we are not likely to be hit we are far away it's Eastern Europe which will now suffer the consequence of any war over here so why the hell should we bother but of course as we know European landmass particularly Western Europe and Central Europe is not that far therefore any range of nuclear exchange over there is going to use you know effect everybody and let's face it if nuclear exchange takes place in Europe it's going to probably mean the end of not only European civilization but possibly all global civilization because it's been calculated just a few nuclear explosions around the world of this kind will probably mean the end of the climate change that we talk about it will mean possibly the end of a whole range of human activities and it's doubtful that the human civilization would survive it but let's face it it's Western Europe and Eastern Europe where this major battle is going to be fought so I'm surprised that in order to threaten Russia which is what they're planning to do why are the risking their own territories for this is a question that I really have no answer for it's a question we need to ask the European leadership what are the possibilities in the standoff between Russia Ukraine and NATO can this region risk a full blown war none of the talks between American President Joe Biden and Russian President Volodymyr Putin seems to have de-escalated the current situation is there a likelihood of Russia invading Ukraine will Russia budge from its red lines will the US and the leading European powers in NATO accept that Russia has legitimate security concerns about NATO's eastwards march if not a war will be fought on the European theater on both sides countries have nuclear weapons and this makes it for far more dangerous than any other war that we have seen in recent times let's unpack this in the last segment you know the issue really is whether now what Biden has said that is willing to discuss these issues and if he discusses these issues it's not a discussion between only United States and Russia just Biden and Putin or their as a what would be called their negotiators but would also mean NATO collectively discussing these issues and I do think that the fact that Biden has said after all of these noises that Putin has made that yes we are going to discuss we'll start the process of discussion maybe maybe there is some rethinking that this is not the best way to go that their threat is very simple the US has made this threat time and again that if Russia threatens Ukraine enters military Ukraine it's most possible that NATO will not be able to prevent it Russia is much too militarily powerful so they would then do what is called the economic the financial nuclear option which is throw Russia out of the financial system of the world which the US has the ability to do because dollar is the basically the financial currency in which all transactions takes place and they control those transactions to what's called the swift system but that is really a economically what would be called a nuclear option so therefore I doubt very much that they want to go that far and if they do European Union would suffer significantly because then the gas that they rely on particularly in winter comes from Russia so the economic ties between Russia and Europe if they are sundered if they are separated like this that's huge consequences for Europe itself so hopefully better sense will prevail on Europe and better sense will prevail on Biden to at least come to an agreement that what they will do with NATO what they will do with Ukraine will be limited earlier they had this Georgia when they actually supported Georgia in a way that led to Georgia trying to enter two autonomous regions at that time which had not declared independence but was still outside the control of the Georgian settled government and that led to a limited war with Russia and Georgia actually lost and obviously NATO couldn't come in over there because Georgia is rather far away and it's a very small country Ukraine also similarly has much less capacity to stand up to Russia so will the NATO fight a war on Ukraine not likely will it lead to a war that takes place by accident it is possible but I think better sense will prevail these are all noises being made and finally maybe both sides when they come to the negotiating table will take a much more sober posture and hope that we can resolve this issue peacefully and we don't see 2022 start with the near war


Okay, uh, here's what we're gonna do. We're just gonna try to two-bar them Tien I love this character dude. How's it going everybody dacho doi here with another round of dragon ball fighters rank matches This time we're playing a team of bardock tien and yamcha Now the reason we're doing this team is because I was recently watching combo breaker I saw apology man's tien was really amazing to me I I don't know why I just thought his tien was super clean And bardock is just that you know, that's a little something for me It's been a while bardock used to be a main stay here on the channel that kind of ended Oh, that's why you love playing bardock, dude God this team is ridiculous bardock is ridiculous. You can't nerf this character, by the way That's what makes him so great. He's he's just at his core. He's he's too good At his core, he plays dragon ball fighters too. Well, and I think that might be a fun idea for a video But just like in short buttons ridiculous neutral. He's got it Only thing he really lacks is a good projectile, but even then it's fun Like you don't really need a beam projectile to be great. You could just it just imagine if he had one That would be ridiculous All right, we got him in the corner now Ah, that doesn't work. The other thing is I'm not too familiar with new bardock In the patch, he got dressed up pretty he got changed a lot. No, jeez Oh, just slap him down Unfortunate It didn't even get me out of the corner as far as I thought it would. Oh, I could have blocked that Oh, that worked Not optimal to say the least but that was just cool. I just wanted bardock out of there So I was like if this hits, let me just dhc into tn Oh, we're taking feeding here too. We're in the corner now. Oh, I didn't even see the bardock coming I gotta take a better look at this dude's team Who he's got up and stuff like that? Oh man, big mistake. I need to get tn out of here. Oh, don't block that. Yeah, that's a big block That's a big block. That was just poor tn play on my part That's why I thought the tn was so cool because my tn is trash Nice This should kill. I'm tn. I got big tn damage Yeah, tn is wild This would actually be a fun made team. I think I don't know if any of you guys play this team out there Just let me know dude. I am loving life. I can't believe I blocked that the first one Uh, I thought I got crossed Okay down he has the mix. No, he doesn't want it though Hey, you're fighting me down here, buddy Oh, I messed that up. All right. I'll back up. I'll back up. Oh, I tried to drop the elbow on him Didn't work and we're gonna die here Uh, unfortunate, but he did have to spend three bars. It looks like he had seven though I was like they have spending three bars. Huh? Look down four left.  You would drop with the dragon rush. That was nice All right, now we're back down to our level three character. It's it's crazy how fast they can pick up, right? Sparking level three bar doc. He's out here Okay, that was almost bad No, y'all have to other way. Oh, no, now we don't have the bar fit. What was that? Did he crack? See that's the thing about online fighting games. See my opponent's not sitting next to me I have no idea what that dude's thinking in my head. He was calms In my head, he was calm suave and a professional In reality, somebody was at his door like dude, we got to go. We're late and he was like, all right Well, then he just threw it a level three and left Crazy. All right, here we are in game two. Uh important notes is this guy's actually a super saiyan reze Some more points on the line and he's playing trunks and vegeta two characters that I find very annoying to go against plus frames plus frames Oh, come on Oh, we could have been in there There we go. Now we are Now we're in there Oh, I need just woke up buttons because I had poor timing there. I knew it would happen. I just didn't want to accept Oh, that was close Oh, okay. I gotta stop staggering now. Now it's expected Okay, so we're gonna take big damage actually. Wow Big damage. We do manage to get out of there. Oh dp at the perfect height. I respect it Oh, okay, we don't get punished for that either, but it's probably still not worth the bar If I have a minute, I wanted to get chow to you. I had to stun him No down heavy catches that either A tn does not care. He's got that normal Oh tn Slap this dude down tm. What are we doing here? Again big punish there.  That was just lack of confidence in tn in my tn specifically All right back it up. Oh, wow. All right. Oh, I knew that was risky, but He hadn't punished one so far. So I was feeling it We go close. Now we're good. Oh, he's coming in. He's encroaching on my territory No double overhead.  Oh, he called me out. He knew I was gonna do it I show that move way too often Oh, and just exes it for the raw speed factor of it That's gonna be our death one bar. He he dropped it again Okay, well he had to spend the bar anyway Damn, I thought for sure he wouldn't be able to vanish after that. Oh, that would have been good That would have been good. Oh, we're actually looking a little low. We're looking a little worse for where Oh Oh, I try to mix them up. Okay. Well, here's what we're gonna do We're just gonna try to two bar them The end I love this character, dude It's just too funny how much damage Bad key blast though. I don't I don't like his air key blast too much All right, I backed it up Oh, don't try to drag and rush after that. All right, I'm gonna be honest chat So you haven't been helping at all. We might as well get the deeps Goodbye friend Let's try the overhead Again, I threw out a key blast bad timing. I was just like might as well go with a little keep nope beamed out I think what I should have done there is just kept the pressure on Oh, definitely not this Sparking's up. Does he have the combo? He does not but we have to hit sparking right now because it's just too risky Nice. We're in I don't know too much. Why would we stall here? I don't I don't think we should I'm not gonna do it Let's just go with a level three try to keep them in check. I don't want to risk it because that God that that wake up level three would be deadly to me. Oh, no, we could have had it Nice. Okay, we got him. That was so bad of me though. I shouldn't have gone for it down heavy there I did it just happened to work out not of not not really a match result. I'm proud of But still one we can take I mean it wins a win Well, we'll take it We made some mistakes that we can correct in this next match for sure though Just gonna have to see what happens I think he's gonna play more aggressive with trunks at the beginning. Yeah Oh and it caught me the super dash caught Nice, thankfully I I propelled myself in the air just long enough to not That didn't work big damage and a big drop with that Have you ever just been so happy you got a hit again? I don't know the New bar doc stuff I do know the old bar doc stuff well enough I know it well enough to get a kill and that's an area I wish I knew that optimal new corner route I know I know what it looks I can piece it together in my mind from what it looks like That's from footage. Oh Plus frames. Let's go. You know what? I'm just gonna forget plus frames, dude If we get this let me just get this corner stuff. I'm gonna start off with a nice 2m If he sparks he sparks he'll get away that way, but There we go boys That's what we call a good maneuver. Oh just kill nice Oh, that was nice I think we could have probably been more optimal there, but I'm just glad I timed the do it on that's that's where I'm at in my life right now I'm just happy. I timed the do it on right correctly Okay defense standard defense except he jumped too high. He's okay. Now. We know what he's going. He likes to cross up But very high I was expecting to drop him ahead with a jump dive kick No, no Oh rough dive kick. This is why we don't do the dive kicks Am I I don't know do I live this nope dead? Oh, see you see you later All right, man, what do you got to show me? He tried it.  I'm gonna go in with the slide Whoop folly ball this let's go.  Love it. Love it. Okay. We're up to I don't know if we should just make this a first to set everyone We'll keep going we'll keep going If he wants to if he quits that I guess that's the end of the rank session because we technically got three wins for this video Does he stay he does stay. All right, let's go Next map.  Nope and back dash off that Oh, we were safe, but now we're not oh too well. It doesn't go. Oh the direction I need either I caught my super dash. All right, so he's going. Oh, I did I was looking at my health bar Oh, no the split second I needed it All right, we're free We fought for our freedom boys I had a lot of jumps left Oh, I didn't recover in time. No All right, but we get trunks back. All right. Now it's time to put the actual pressure on All right, it's oki time. Let's go. You're the one who's going to get mixed My only question is what is the mix? Oh nice. Uh, I got him Not the best by the way It just happened to work Bar doc players. We are truly bar doc players of this lesson day. Now. Let me spam some L's boys I didn't block the right way I thought it was in the corner. I had a bright future ahead of me What are you doing sticking out those limbs? Oh, no Oh, no. Oh, no. No, he killed me. I'm not so worried about bar doc, but tn still had some blue health. I wanted back Damn That's not great Oh, and he just exed it. Oh, he gets the whole All right, we're out Nice two h just to keep him at bay Oh, why did I spend that much bar? That was mostly to buy time, but I I'd be lying if I said I didn't also want to level three This is sick. We're gonna kill. I know you don't think so and neither do I honestly, but come on tn I didn't get the dooper. Can you even do the two for I'll get out of my face Oh, no, we may but we're still kicking Oh, the the volleyball fist doesn't block it. I probably didn't start it up Uh, well, we got level three sparking. So I'm still confident we can win How many of those do you think you can block? I should have stopped Get out of my way. I'm trying to get this win. I'm trying to get this w I'm trying to get this big win Dude, can you believe how much I sucked it up right there? ah And I'm still going for the hardest of reads Man, sweep the leg. Nice. Got it. Take the win. We got to get out of here That was too tense, dude Hopefully you guys enjoyed it If you did make sure to go down below in that uh comment section. Let me know your favorite moment Also, let me know your thoughts on tn if he has any uh cool stuff. I should check out Uh while you're down there though If you like the video and the channel make sure to the like button and subscribe Other than that I have some videos up on your screen that you can feel free to check out If you haven't seen them before and once again, thank you so much for watching this particular video I have been dr. Doia and I will see you in the next one


Hi there, my name is Emily and I work on the learning team here at Moz. Welcome to this Daily SEO Fixed series on competitive link research. In this video, I will show you how to use Moz's link intersect tool to find any gaps there may be in both you and your competitor's link profiles. This is called link gap analysis. The link intersect tool within Link Explorer will show you sites that are linking to your competitors, but not to you. This is a clever way to explore your competitor's backlink profile and gives you some helpful ideas about which sites you may want to reach out to when building in-band links. But what if you don't know who your competitors are just yet? Before we move on, why not have a look at our new suite of competitive research tools? These tools can help you figure out who your competitors are and knowing exactly who your competitors are will set you up for greater success throughout this Daily SEO Fixed series. Feel free to pause this video now before we jump into link gap analysis. Okay, let's head to the link intersect tool. Firstly, choose from root domain, subdomain or exact page. You will then input your own website and up to five competitor websites in the fields provided. That is A through E. Once you've done that, click find opportunities. Scroll down to the list of link intersections. This is a list of all the sites that are linking to your competitors, but not to you. The list shows the URL, the domain authority of that website and the spam score. The sites that are getting links from this listed site are shown in the column with their corresponding letter and if you drop down the arrow to the right, it will show you the top referring page. You can sort the results by any of these columns. For example, if you wanted to see those sites that have the largest DA score, you could sort by DA. This can be a great way to help you decide which links may be best for you to work on based on your backlink strategy. Now, there are a few ways you can keep track of your link building efforts. The first would be to add links or root domains to link tracking lists so you can keep track of who you've reached out to. To add pages or root domains to a link tracking list, select them using the checkboxes to the left of each link and then click add to link tracking list on the top right. You can also export the data you're seeing to a CSV by using the link on the top right. You now have the knowledge you need to go and perform your own link gap analysis. Good luck and thanks for watching.


And Facundo Batista will be telling us about Python descriptors. There will be some time for questions at the end. So hang on to that, and I'll come around with microphones at the end. I'll leave it to you. Thank you very much. Did you hear me OK? Yes. OK. Welcome. Thanks to be here. Thanks for the organizers of putting together this awesome conference. I will be talking about descriptors. Just trying to everybody understand a little descriptor. Descriptor is a hard topic. Normally, the 50 times that I saw presentations about descriptors until I understood it, it's a lot of theory. And you get out of the presentation saying, OK, I kind of understand the theory, but I don't have a clue how to apply that. So we hooked that this hocking that is the other author of this talk. We decided to do it backwards. So we like games, board games, and role games. And we decided that as we are nerds level two, we not only wanted to play board games, but to create them to design a system where you can create board games. So it's like playing the game, it's like a meta-play. So we wanted not only to create the system, but we wanted to offer other people ways to create board games. And we wanted to offer them a possibility of creating board games in a simple way, in a useful way. So we wanted to do something like this. We wanted to have powers and characters. The powers is where you encapsulate what the powers can do. So for example, you have a strength that is a useful power for a character. And if you have a strength, you can break walls or you can jump a hole, et cetera. If you have magic, you can do an spell, et cetera. See that it's very simple to find the power. It's just a class, it's just what you can do. And the action itself is a method that, of course, according to some value, you have more and less magic, et cetera, you can do it or not. And when you define a character, you just define what powers this character has. So this is very simple written. If you write it like this, it will not work, but we wanted to do this. And we wanted to go from here. So this is how we will use this very simple mechanism. For example, you instantiate a character that is Gimli. Gimli, you can instantiate it with a lot of strength and see how you can check if Gimli can break a wall. You ask for the strength of Gimli and see what the power can do. Also, you can modify very easily the value of that power. See that how I directly modify that power in Gimli. So if I put more power to Gimli, for example, it will be able to break the wall. Or, for example, this is a character that has both powers. So it has some strength and has some magic. And if it's OK, Gandalf can charm a tree, it's OK, but Gandalf cannot fight Saruman. But I can just put more magic in Gandalf. And from that point, Gandalf the White will be able to fight Saruman. The idea is that we wanted to present, we wanted to give the powers in the characters in a very simple way to manipulate, working with them like numbers. So you can get or you can set the powers in the character, but also encapsulating what the power will be able to do in that very same class where you define the power. So it's a very weird way of doing things, but it's very simple. So how we did this? I mean, we didn't do it with magic. I mean, this is not magic. It's just we used the scriptors to make that work. So the idea here is that we will go now a little into the theory of the scriptors, and then we go back to the board game and see how we did apply that theory. So this is last chance. If you want to see the scriptors, you stay. So a descriptor in general is an attribute with binding behavior. One whose attribute access has been overriding by methods in the descriptor protocol. Very, very simple, right? It's very understandable. I mean, you already know how it works. The idea is to see what we really are doing here in more simple words. The idea behind the scriptors is that you take control of some normal Python behavior. Every time you do a set of an attribute in some object, every time you get some attribute from some object, or every time you remove some attribute in some object, with the scriptors, you get the possibility to execute your own code instead of normal Python behavior. So when I do some object.attribute equal 42 in that case, it's not Python just assigning the value 42 to the attribute in this object. But instead, if I'm working with descriptors, some code of mine is being executed in that moment. How is that? You define the descriptor with classes. For a class to be a descriptor, it has to have some special metals. In this case, we have a dunder gate. The dunder gate makes this class a descriptor. This dunder gate will be executed every time you access the attribute. So let's see it in real code. In the upper part, I have the very same class that the last slide, where I have a dunder gate, and that dunder gate just return hello world. Then I define another class that is the class where I use the descriptor, and see that x is a class attribute that is very important because the descriptor magic is activated when you are using it. We are using the descriptor as a class attribute. x is a class attribute that has an instance of the hello world descriptor. Then I instantiate any class, and the moment that I do ac.x, the moment that I'm accessing that attribute, my own code is being executed. So this is the proof that with descriptors, I can get in the middle of the Python execution for this gate. So far, how are you doing? It's totally crazy. Makes sense. I already lost you. It works. You see how this magic happens. So we have another special method for descriptors. We have the dunder set. The dunder set is executed the moment I set the attribute that when the attribute is the class descriptor. This is very similar to before. I have my descriptor that is a normal class, but as it has the dunder set, it's a descriptor. I use that descriptor in a class attribute in another class, and then when I set that attribute, my own code there will be called. See that the, I didn't mention that. For example, in the dunder gate, I receive the instance of the class, and the class that instance belongs. It sometimes uses for some clever tricks. The class there is not normally used. In the set, it's different. In the set, I receive the instance that is AC, and the value that I'm setting. So I also receive this bleh. Okay. Let's see both working at the same time. This is an example code, just to see a descriptor that has both methods, dunder gate and dunder set. See that the dunder gate is the dunder set, what they do. The dunder set receives a value, and just store that value in the instance dictionary. And the dunder gate retrieves that value with a default in case it's not there yet, and just returns a greeting. Let's use it in the second column. I define a new class, hello world 2, that has a class attribute, again a class attribute, that is a grid, with an instance of this healer. I instance hello world 2, and if I access, if I do healer.grid, that dunder gate will be executed, that will return hello unknown, because the instance still doesn't have the who set. The moment I do healer.grid equals something, the dunder set is executed, and in this case, I put that information in the instance, and when I access the attribute again, it just restore it and use it. Okay. Yes or no? Okay, we have two types of descriptors. We have overriding descriptors and non-overriding descriptors. This is where confusion starts to flourish. But don't worry, it's very simple. They are just classifying two groups, because the behavior is a little different. Where the behavior is different, here. In the first column in the left, we have an overriding descriptor. See that we have a class that has both dunder gate and dunder set metals. In this case, I use the descriptor here. When I do c.d, it executes the gate. And when I do c.d equals something, I execute the set. This is very similar to what we saw before. More than very similar, it's the same. In the case of non-overriding descriptors, we do not have a set metal. The difference of not having a set metal is that when I use the descriptor, if I do a c.d, of course it executes the gate. But the moment I do c.d equals something, the attribute d of the instant, c is overwritten by this value. So from this point on, c.d is one to three. It's no longer the descriptor. In this case, I execute this dunder set, and from this point on, c.d is still the descriptor. This is the only difference. You have to be careful when you write your own descriptors, because even if you don't want to put any special behavior in the set, you need to be careful that if you don't specify the under set in your descriptor, it may be overwritten. Of course, it's a behavior that you may want to use. And we will see a very common case where that behavior of non-numbering descriptor is used by you normally. Okay, just for completeness, we have another special method that is dunderdel that, as you may imagine, it's a specified code that is executed when you delete an attribute. So in this case, when you do del ac.ex, you override the normal Python behavior of removing that attribute, but you just execute some code of yours. Okay, one note here, because when I present these examples, you say, oh my God, yes, you can do whatever you want with properties. It's instead of using descriptors manually, yes, you can do, but the point of the talk is to talk about descriptors. So I cannot make the examples too complicated, et cetera. So let's go back to Wizard's Dwarves and see how we use this descriptor theory in the practice. Remember this that we have. The idea of having powers which encapsulate what the power can do and the character defining the powers as class attributes, and then being able to just instantiate the character, try to see if the character can do some stuff asking through the powers that the character has, but also modifying the values of the powers like simple numbers. This of course doesn't work if you just write this because some magic, we need to add some magic here. How we make this work? Okay, we make this work not only using descriptors, but also class decorators. So the idea behind all the magic is that we have this power descriptor. This is the first time I presented descriptor for the Wizard's and Dwarves case. This is the only descriptor that we have. This descriptor that has the under set and under get, when you instantiate it, you get the name of the power and the class of the power. So it can be magic and the class magic for the power you define it. And the only thing that it does is just store in the instant dictionary, very similar to the other example, it just store the instance of the power class that it received with the value that it received. And in the case of the under get, it just retrieves that. How we make to this power descriptor to be used by the other parts of the system? We have two class decorator. We have this at power that gets this very simple power class that you wrote and makes two things. For one on one hand, it registers strength or magic as a power, but also makes that these classes behave like numbers. And then we have another class decorator that is character that grabs the character you wrote and for the class attributes that you specify there, automatically converts them to be descriptors. To be descriptors because there you just put class descriptors. Sorry, there you just put class attribute, but these are not descriptors, so it automatically converts them. Before going into more detail of the code, let's see other cases where the descriptors are used in real life. So Python methods is the most normal case of using descriptors. When you define a method, what is a method really? What is the depth there? It's a function, right? And the function there, where is the finite function in the class? So method is a kind of class attribute and this works like a descriptor. The descriptor does this magic, so when you call food.method12, the special descriptor is executed that calls the function, you define it, adding a self in the front. So the magic of automatically inserting a self when you call in a method is done by descriptors. And these are non-data descriptors. So if you have an instance foo and you do foo.method equal something, you override that name. Remember that we have two types of descriptors and if you had the under gate and under set, the descriptor was executed and if you only had the under gate, when you set the attribute, you lost the original descriptors. Methods works like that. If you set a name or something with the name of the method, you lose the method in an instance. Python works like that. So Django, most of the magic in models declaration of Django is done by descriptors. The very same way that I put the powers in the characters before, you just specify stuff at the class level and it works. How that works? They are descriptors. Did you ever use slots? Slots also work through descriptors with a very detail that is not implemented in Python really but it uses the descriptors API directly from C but it also uses descriptors, the concept. How are we going with the time? Okay. So we have time for the bonus track that is where we get into the class decorator and the detail of the code to make that game board work. Before going into the detail of the code, I wanted to present a little about class decorator because it's not a common topic. Class decorator, I don't know if you ever heard about razorhands if you ever see a class decorator before. Awesome. And razorhands if you saw a normal decorator before. So this is very simple. A class decorator is a function that receives a class and returns and returns a class. It's the same that the function decorator but for classes. It's the same concept. If you have a definition of class foo, whatever, foo is the class we define it. But if we have a class definition with a decorator, foo is not what define it. Foo is the class returned by that decorator which receives the class that we define it and did whatever he wants with it. It's the same than doing foo equal decorator foo. The very same thing that function decorators. So how did we use it in the board game? This is the class decorator that I mentioned before that you just put it in the very simple power class that you define and makes it magic. See what it does. This code is not really simple but we can make it understandable. The power receives a class. The class is this one that we are defining and the power decorator creates another class, a new class with a type function that inherits this very class but also inherits float. And this is how the behavior of a number is inserted to the power. And also registers that class name in a global dictionary that will be used later. Also we have another class decorator that was character that we applied when we define characters. Character, the class decorator, just gets the registered powers and if we have a class attribute in the class that is received that has the same name of a registered power like strength or magic in this example, it replaces it. It replaces it. See that setator? It replaces it with a descriptor that is our power descriptor that is the only descriptor that we use in this system. It replaces it with that power descriptor that holds the name of the power and the class of the power. This is how you are be able to write this very simple code to make the board game without even noticing that descriptors works in the back. Okay, that's all. It wasn't that hard. The concept that I want for you to take here is that descriptors allows you to get into the normal Python behavior when you get an attribute, when you set an attribute, and when you delete an attribute that you have two types of descriptors, those two types of descriptors, the difference is that in one case, when you set an attribute, the code of the descriptor is executed and in the other type of class descriptors, when you set the attribute, the descriptor is removed from the instance overwritten. And also the idea that I want for you to take from here is that it's not deep magic that, okay, maybe it's useful for me to understand because I may hit some code somewhere and I need to understand it, but that is something that you can really use in the cases that you want to get in the middle of the code. So take it in mind, and when you need to solve some specific stuff, the descriptors may be useful for you. In this very presentation that is already published in the web, you can see the code, you can see it unless you have a telescope or something, but there is all the code for making everything work, so if you are interested, go paste that into a couple of dotpies and start to play some legal stuff because maybe Michael Jordan didn't say what I said, but, and that's all. Thank you. Liza here, and if you have any question, I'm very glad to not answer them. Oh, okay. I find this descriptor thing quite appealing because it's like an alternative to when you have to do metaprogramming to insert things and stuff like that, but I'm wondering how is it to debug? How hard is it compared to metaprogramming or doing everything more plain by them?  I mean, you have a code like this, you have a code like this, and the only thing that you need to take in consideration that in the case, for example, of doing Gimli.strength equal, whatever, you are doing a function call at that point. So when you read your code and you know that you're accessing a descriptor, you know that in that case, you're getting to shamping to that part of the code and that's all. The moment you understand that, you can easily follow the flow of the execution. So when you are doing the, well, I was more referring to the last part where you actually use a type to create a class insert in the methods. So I was more referring to the bug in that part. It just works. I didn't have to debug it really. It just works. Actually, when we created the presentation, it was three times more complex, everything. We found the way to make it simple like this that is not simple, but it does what it needs to. Can you go to the next slide when there is a target? I think in this one, it looks like it's looking at the name of the attribute, not the actual class. So if I call, if I'm the class character, I call something strength, but then I do equal to. There's nothing to do with the actual, what happens? This, yes, if you misspell this, it will fail. You can, you could check for the instance and the class name and it will be more robust. So you should check, in theory, on the right and not on the left to be more sure of what you're doing. Because it can, I don't know. You could. It will be better. This works. I mean, this whole board game thing, whatever, it's just an excuse for the talk. We really didn't do this for real, but this is just an excuse to use the script or somewhere. Okay, so another question. Is there a reason to use a Dunder dict and the score is for dict in the get and set before in the other slides and not set after, for example, because, is it because you can't use it there, maybe? Sorry, when? Where? In the Dunder get and Dunder set before. It's accessing done. In the Power Descriptor. Yeah. Here. Yeah, why not doing set after there? Does it work, maybe, or? I don't remember now, but I think there is a case where it doesn't work. I don't remember why. Ah, right. Right, if you access, if you do instance. Or, well, set after instance name and the value, it will be calling the descriptor itself. So you don't set the attribute, it's just mess with the dict. Okay, so how do you deal with inheritance when using class descriptors? Well, that's a very, this is interesting question because this is one case where you cannot use properties because, I mean, you are encapsulating code and you want to use inheritance, so you cannot use property anymore. You need to use proper descriptors. You just use it, it just works. There is no magic there. You can have parent classes with the others, methods or whatever, the descriptor inheritance, and it works. So basically you have to put class decorator in both parent and child class, but that case, Ah, you say not when created the decorator, but when you see it in this case? No, in class decorators for a character, for example. It does some magic with applying a power descriptor. I don't know. In that case, I don't know if I didn't try it. I mean, I remember this whole board game, power character, whatever, it's just an excuse for the presentation. We didn't use it in production or anything. So I would need to follow the code now. I didn't try it. There is another one here. In the previous slide, with the power decorator, is there any reason why you are setting the value into the instance dictionary and not into the power descriptor instance itself? Yes, because the power descriptor will use, will maybe apply to different instances. So it's a normal behavior, maybe not in this case, but you may have the descriptor instance to be applied to different attributes. So you normally start the stuff into the instance. It's what you normally see in the, everybody does. But what if another descriptor wants to instance, wants to access the same key in the instance dictionary? It doesn't happen in this case. If you have that case, you can start it whatever you want. Okay, thank you. I mean, there is no Python magic here. You just put stuff in some places and then use it. I mean, you could have a global dictionary with the key being the instance and the name and access that global dictionary instead of storing stuff in the instance. You can pick it, you can send it to the database. But it's pretty normal for the descriptors to mess with the instance dict. Yeah, great talk. Thank you. I have a question. Can you explain more why we are initializing the descriptors inside the class and not, for example, in the dunder in it? And can we change the descriptor during the runtime? Not on this slide, the previous one, for example. Yeah, here on the class, you initialize strength and magic inside the class and not in the dunder in it. I'm initializing it. The construction of the strength and magic. The what? The construction. There, the instantiation. Yeah, why? Because it needs to be a class descriptor. If it's not a class descriptor, it doesn't work like a descriptor. Sorry, sorry. If it's not a class attribute, it doesn't work like a descriptor. The magic of have a class having get or set and being a descriptor is only executed when that is a class attribute. So also see here that in the moment of instantiation, I'm doing self dot strength equal strength and also at this very same moment, I'm executing the descriptor's code. Thank you. I think that's the last four questions. Okay. So everyone have a very nice lunch. Thank you very much.