Give the people what they want. Give the people what they want. Give the people what they want. Your weekly movement news roundup. You're with Give the People What They Want, brought to you from People's Dispatch. Zoe and Prashant. I'm Vijay from Globetrotter. Show number 145 for us. We're going to start at the top of the show with the terrible violence that has been taking place not just recently, not even this year, but in fact for decades around the province of Nagorno-Karabakh between Armenia and Azerbaijan. Prashant, tell us what's been happening most recently in Armenia and Azerbaijan. Like you said, of course, it's a decades old conflict. In fact, has its roots even before the dissolution of the Soviet Union in the early 90s. And even in the late 80s, this conflict is very missed there. Pretty much centered around this region called Nagorno-Karabakh, which is part of Azerbaijan, but dominated by the ethnic Armenian community who are definitely the majority over there. And while growing up, the Armenian-Azerbaijan conflict was something you heard about, often talked about as one of the ethnic conflicts of the world. Multiple ceasefires taking place. There was one war in the 90s. Then there were continuous conflicts. In 2020, there was an all out fight that war that took place as well. And the most recent development, of course, is the fact that last week Azerbaijan launched what they called a military operation. And at that point, Nagorno-Karabakh, which was functioning as a de facto republic called the Republic of Artsakh, but not recognized anywhere, but it had its own government, so to speak, and its authorities. Basically, at some point, they decided to dissolve themselves and there's been this huge migration or fleeing exodus of ethnic Armenians out of that region back into Armenia. Now, what is really over the past many years also sort of compounded the situation is that the entire region has become yet another site of what is clearly massive geopolitical conflict between Russia and the West. Both sides clearly sort of, you know, trying to establish hegemony over the region. And it's not just Russia and the West. Turkey is a vital player there. Has been a very powerful supporter of Azerbaijan. Iran has its own interests over there. So that whole region has become quite a hotspot. And what is if it's important to note that in 2020 when the war took place, it concluded with the ceasefire by which Russian peacekeepers were there under the auspices of what is called the CSTO, the collective security organization which is a combination of Russia and a couple of other countries in the region. Now, what has happened over the past few past some time is that Armenia has in fact moved far more closer to the ambit of the West and that is definitely sending alarm bells ringing in Russia. In fact, there seems to have been some kind of an agreement which actually ends the conflict in Nagorno-Karabakh because Nagorno-Karabakh is now effectively completely under Azerbaijan. But that is also alongside that what has also happened is that what do you call the Armenian Prime Minister Nikol Pashpashnyan has sort of blamed Russia for not being able to handle that issue, for not being able to maintain peace, etc. And is presenting that as a justification to sort of move closer towards the West and as you can definitely sort of guess the United States Samantha Power along with the Assistant Secretary of State in the United States. Both there in Armenia last week as well conducted negotiations. There has been a lot, there was another meeting which took place along on the sidelines of the UN General Assembly as well. We have an article from Ambassador M.B.K. Bhatrakumar on that on our side. All of which talk about an expanding US presence in the region the possibility of you know has largely been framed in some sense in an economic sense. There has been talk about cooperation around minerals, there has been some talk about cooperation on security etc. But all of this sort of is definitely a precursor for what could be what could be far more security collaboration on this issue as well. So this region now becoming a very vital point in that larger sort of lack of better word game that is taking place in Eurasia as well. What is the US and western strategy are they trying to sort of bring Armenia closer very much into the EU ambit. Of course I don't know how long membership or what are the questions about that. But definitely intensified cooperation is very much on the agenda. There have been quite a few summits on that count and you know what this will bring to that region which is already just has a history of intense conflict is both interesting in some ways also pretty alarming as well. So while on the face of it this is in some senses a very I don't know if the resolution is the right word for it because there is so many people who had to leave the homes, there's been an exodus but while Nagorno-Karabakh the legality of Nagorno-Karabakh itself might be for the time being settled. This is definitely the beginning of what is another round of intense contestation in that area Russia does have a base in Armenia as well so there's going to be a lot of pushing and pulling in that region and definitely the best is going to see this as another front against Russia. So I would say many complicated times ahead for that region as a whole. Another situation of two countries used to be part of the USSR, the union of Soviet Socialist Republics part of the fallout of the collapse of that project. Well you know this has been trying for decades Zoe to collapse another project and that's the Cuban Revolution there's been some disturbing news and interesting news from the United States attack on an embassy on the other hand the greatest you know enemy of the Cuban revolution seems to be in trouble what's happening in the United States regarding Cuba. Well on the night of Sunday September 24th the Cuban Embassy in Washington DC was attacked with two Molotov cocktails this was immediately denounced across social media and in press statements by the Cuban Foreign Ministry as a terrorist attack they called on US authorities to take appropriate measures to protect the embassy and to get to the bottom of who was behind this attack and it's interesting and Cuban officials pointed out that this is not the first attack that they've suffered and especially against this embassy in 2020 an individual of Cuban American origin fired an AK-47 against and shot up the front of this embassy thankfully and neither of these attacks was anyone injured but it really calls into question what does it mean to be considered sort of an enemy of the United States yet have diplomatic installations in that country for example Venezuela for example the embassies that were taken over by the far right and put in complete destruction the Venezuelan consulate in New York City is deteriorating and abandoned and Cuban officials in this case called on US officials to condemn this act as an act of terrorism saying if the same thing happened to US embassy anywhere in the world there would be no question in calling this an act of terrorism in fact we know what happens when there's any sort of attack on a US embassy and it took a couple of days but the US State Department pronounced and condemned the attack on the Cuban embassy they have not yet classified it as a terrorist attack and said it's under investigation but again this has really it's interesting that this happened just one day after the event which you Vijay were participating in voices of dignity wherein the president of Cuba Miguel Diaz Canel addressed around 800 young people people of diverse backgrounds from diverse organizations from the United States who listened to him to the foreign minister of Venezuela speaking about the impact of US sanctions, the impact of US policy and above all emphasizing that they actually have a lot of will and desire to have good relations with the United States so many say that this attack on the embassy was in retaliation to the very successful week that Cuba actually had at the UN in New York over 40 countries actually in their statements and their addresses to the UN General Assembly condemned the US blockade of Cuba and we know that usually around November beginning of November there's a vote of resolution calling for an end to this illegal blockade so once again the US is isolating itself from this horrible policy and as you mentioned Vijay one of the largest one of the biggest enemies of the Cuban revolution, Bob Menendez who is a Democratic Democratic senator from New Jersey just over the river over here he was indicted on bribery and corruption charges which may be related to Egyptian authorities so he leaves no stone unturned when it comes to being against the people and he has been one of the most vocal opponents to easing any sort of restrictions on Cuba. He has a great ally in famous in the infamous Marco Rubio he's opposed for example trying to loosen any of the sanctions that were put on additionally from by Donald Trump he is one of the most vocal proponents of keeping Cuba on the state sponsors of terrorism list he is he no longer is sitting as chair of the foreign relations committee but he has said that he refuses to resign and he even used the excuse that because he is traumatized from being Cuban American and the atrocities that his family suffered when they were forced to flee the Cuban revolution he had these stores of thousands thousands of dollars and of course his family left Cuba under the Batista dictatorship before the revolution triumph so once again a whole pile of lies to justify again a very unjust policy so we'll see what happens the coming days he's facing calls from many of his peers to resign so we'll be following that. It's a very important situation down south from Cuba in Venezuela and of course north of Cuba and Miami there's another dramatic story in play a special envoy of the Venezuelan government is sitting in a federal prison in Miami and has been there for a very long time his name is Alex Saab it's an interesting story and I want to take some time to actually tell the story of the Alex Saab case but first the reason we're talking about it is because two UN special envoys Elena Duhan the special rapporteur on the negative impact of unilateral coercive measures who had written previously a very important report on Venezuela and Livingston Savaniana who's an independent expert on the promotion of a democratic and equitable international order the two of them have released a report on the Alex Saab case in their capacity as United Nations special rapporteurs it's an important document because it asks for the United States to immediately release Mr. Saab and to comply with its obligations under international law and drop all charges against Mr. Saab this phrase drop all charges is from the UN independent rapporteurs now what is the case against Mr. Alex Saab first it's important to know that in April of 2018 the Venezuelan government appointed Alex Saab as the special envoy of the United Nations to Iran to secure humanitarian deliveries of food and medicine well this is as a consequence of innocence a tight suffocation of Venezuela by US policy what others have called the hybrid war against Venezuela Mr. Saab was you know I was charged by the government of Caracas the capital of Venezuela to be the envoy to go to Iran well Mr. Saab went to Iran he was placed at the same time under US sanctions these are the unilateral sanctions of the United States government they place sanctions saying that there is corruption involved in the CLAP program which is the program the Venezuelan government has to feed people who cannot get food because of the sanctions I mean it's a curiosity here's the US government finishing a Venezuelan national for trying to help the Venezuelan people survive from unilateral US coercive measures against the people of Venezuela it's a strange story well what happened was in June of 2020 during his third trip to Iran Mr. Alex Saab went into transit in Cabo Verde in order to return Mr. Saab was arrested now the United States immediately filed an extradition warrant to bring Mr. Saab to the United States at the time Mr. Saab and his lawyers appealed to the Cabo Verde government against the extradition asking you know through their appeals to go back to the court and so on the Cabo Verde government actually didn't honor the request for appeals and Mr. Saab was extradited to the United States in October 2021 now this is important what the what the special rapporteurs say is that his request for appeals were not honored by the Cabo Verde government you know there was a red there was when he was arrested at Amilca Cabral International Airport at that time there was no red notice for the arrest in other words on what basis was Mr. Saab arrested and then most strikingly of the 7 counts of money laundering that the United States had placed against him they decided to drop all of them and maintain a single count of conspiracy to commit money laundering what the experts say is for 2 years he has been sitting in a prison cell most likely in the Federal Detention Center in Miami and he has not been tried for anything meanwhile all the cases all the reasons for his extradition have been withdrawn except a case for a conspiracy to commit money laundering so they have tried to raise this issue with the United States and said it's about time that this man is released because after all even you have dropped your cases against him why are you holding him conspiracy to commit money laundering at least there should be a hearing on that trial this is a miscarriage of justice a very interesting report from the United Nations on the Alex Saab case also reflecting on the nature of the unilateral coercive measures used by the United States against the people of Venezuela you are listening to give the people what they want brought to you by People's Dispatch Zoe Prashan I am Vijay from Globetrotter we are going to move on from Venezuela across the Gulf again now back to Mexico where there is an anniversary of a very sad event that took place in IOTC Napa Zoe take us to that story Well on September 26th it was the 9 year anniversary of the forcible disappearance of the 43 students from Guerrero, Mexico they were students at the rural teachers college and on this day on September 26th there was a horrible essentially massacre of these 43 students they were forcibly disappeared and since that day the survivors and their family members and human rights organizations have been tirelessly fighting for the truth in this case at the time Enrique Peña Nieto was president of Mexico someone who has faces many many different charges of corruption of links with criminal groups and one of the key things that Enrique Peña Nieto did to really respond to the overwhelming wave of demands for justice demands for accountability because in this crime when the 43 students were disappeared there was clear involvement of local authorities of police and the major accusation is the involvement of the National Army in this crime in collusion with drug trafficking groups and so what Enrique Peña Nieto did is say that there was an investigation that this is the historic truth about what happened saying that the drug cartel confused them for members of another cartel and that they disappeared them and disintegrated their bodies and that was what happened case closed and this has been a constant struggle in a battle by the family members by human rights organizations again by the survivors to kind of refute this truth because again Enrique Peña Nieto was essentially attempting to just push the blame on to these lower level authorities and of course cover up the involvement of both his government and the National Army and so since then there's been this long struggle and one of the major promises of Andrés Manuel López Obrador when he began his time as president is that he would help these families and help the people get the truth in this case and so on the anniversary the sub-secretary of human rights population migration Alejandro Encías presented a new report created that has been written with cooperation from many different government agencies from different expert bodies the people have been setting this case and he established in this report that there was that there is a responsibility of Enrique Peña Nieto that there is clear links between the local drug cartel and the National Army and that the Army has refused to get over crucial evidence to actually get to the bottom of this so once again the struggle for justice and Ayotzinapa continues Andrés Manuel has one more year in office so many people are hoping and putting pressure on the fact that they really need to get justice in this case this was a case that had international repercussion many people across the world know about the 43 from Ayotzinapa if they can't actually get truth about what happened to justice if Enrique Peña Nieto cannot be brought to justice in this case the members of the Army that had participation in this what does it say for the tens of thousands of victims of forced disappearances in Mexico this is a huge this is a problem on a huge scale in the country and it again requires the cooperation of many many different agencies many who want to protect themselves to enjoy this impunity but of course the struggle continues and I think it's really laudable this determined this determination of the parents of the family members who have continued despite suffering this horrific loss who have continued to be on the streets occupying the plazas and demanding truth and justice in this case a very important case lots of families seized on the tragedy that took place nine years ago new tragedies Prashant on the border of Niger in the southwest big attack soldiers killed what's been happening in Niger since the coup data against Bazoum now with French troops leaving and so on we actually cross two months since the coup and it's kind of a landmark moment actually a couple of days ago when France finally announced that it's ambassador no real diplomatic authorization anymore to continue in that country but was continuing as some kind of symbol of French defiance or whatever was you know Macron announced that the French ambassador would leave the 1500 soldiers France had in Niger would also leave and in some sense it marks a pretty much an end to I wouldn't say end entirely because French soldiers are still there for instance in a country like Chad but it marks definitely the end of a chapter in what France has been trying to do in the Sahel region as a whole now important to remember that the demand for the departure of both the ambassador and the French troops was very central as far as the coup in Niger was concerned the authorities made that demand very soon after coming to power more importantly people have been on the streets continuously presenting that very same demand that the French troops leave because while the French came to the Sahel region in 2013 and 14 and specifically with operation and the setting up of what was called the G5 Sahel group and their stated aim was to sort of combat extremist groups but over the years there has been no escalation in violence there have been many accusations of atrocities by French soldiers all this has made France very extremely unpopular we talked about this on the show before the wave of coups across the Sahel region which you know the latest one being the coup in Niger there is talk of we have an article from Pawan Kulkarni again talking about the situation in Chad as well where there is a very strong undercurrent of resistance to French forces to the presence of France to the fact that the current military junta leader is completely supported by France massive protests took place even just at the beginning of September and the forces of Chad actually shot at those protesters so this anti-French sentiment taking over the entire region so no surprise that France was forced to withdraw however the question nonetheless does remain that what lies ahead for these countries which have successfully managed to expel the French forces the countries of Mali or Burkina Faso or Niger for instance we know that they formed the alliance of Sahel states recently which has a security dimension but I think it's all these countries in their own ways are facing security threats which are in some ways existential we saw attacks in Mali taking place over time we saw attacks in Niger taking place like the one you mentioned and of course it is interesting that Mali pointed out in the security council that they would not let another Libya take place and not the security council the UN General Assembly they would not let the Libya take place in Niger bringing trying to bring back trying to bring back popular memory to the fact that it is the NATO offensive in Libya which led to this crisis in the first place so very important that that point was made very strongly by Mali but I think for all these countries now there is definitely this question or this challenge of how they're going to sort of deal with this insurgencies that various insurgencies that are taking place the West African people's organization which is a organization of people's movements in the region they issued a statement after the alliance the Sahel states was formed they presented some interesting suggestions and a key aspect of that has been the question of how do you sort of empower the population itself how do you bring people into the process of these uprisings itself and you know make them a part of this process so that's really a challenge which these countries will have the military hooters in these countries will have to address as well so all in all very delicately poised situation in each of these countries they have made they have definitely taken the first step a very important step in expelling a key cause of the problem but of course the other challenges in terms of security definitely remain well that war in Libya was prosecuted principally by the North Atlantic treaty organization NATO led by the French really who are not under direct NATO military command NATO is in the news in East Asia before the NATO summit in Vilnius Lithuania the Japanese prime minister the Japanese ambassador to Washington toji Koji Tomita the foreign minister Yoshimasa Hayashi all of them said that after the Vilnius meeting in Lithuania NATO would open a liaison office in Tokyo pretty strong language coming from the Japanese government now it is also true that Fumio Kishida then prime minister attended sorry Fumio Kishida the current prime minister attended the NATO summit in June 2022 that was a big move and in 2019 Japan had appointed an ambassador to NATO Japan's ties with NATO have been really growing this talk of the liaison office was pretty provocative lot of pushback came immediately from the Chinese government saying look you can't build a NATO office in Japan it's out of the question this sort of put the hair up at the back of the neck of several European countries for instance the French the French were just being booted out of the Sahel region Prashant you just said that perhaps next stop is Chad the French uneasy about antagonizing the Chinese because Airbus had just signed a big deal with the Chinese government to supply China with Airbus aircraft so Mr. Macron hesitated and others joined him saying well this time perhaps we won't build a liaison office NATO liaison office in Japan it's also true the Japanese are a little anxious because they feel uneasy about their reliance principally on the United States for security guarantees the fact that the United States they feel is a fickle friend in these times as U.S. Germany itself is pretty fragile the United States overstretched around the world even the U.S. kind of pressure campaign on China seems to be a little bit so the Japanese themselves quite anxious about their security umbrella from the United States sought a umbrella from NATO didn't work well now it looks like and this is a very important report that has come out in Nike Asia that Japan has decided that 33 of its airports and ports will be upgraded for defense use that means civilian airports across the country close to Russia for instance in the northern Rukyu Islands down to Okinawa and so on the Japanese are upgrading their civilian infrastructure for military this is something that we are going to pay attention to because it might have all kinds of meanings again close watch from North Korea from China from Russia what is Japan up to you've been listening to give the people what they want brought to you from those dispatched that Zoe and Prashant I'm Vijay from Globetrotter see you next week show number 146 next week


While back I did a pitiful reaction for the Batman trailer. I thought it was kind of underwhelming I really didn't have much to say but now after seeing this.  I am all in Twilight's Robert Pattinson, that's not fair. He's done a lot of movies since that are really good But he plays the cape crusader here now some people say stun-casting some people say Horrible choice from where I'm sitting. He's got a Tom Holland thing going on and what I mean by that is He's kind of the best of both worlds. I think Michael Keaton's a fantastic Bruce Wayne He's got those pursed lips looks great in the costume of physicality wise Ben Affleck was pretty awesome Just just from a pure brute strength here though. It looks like Pattinson's really got both those strengths He looks great as Bruce Wayne. He looks terrific as Batman. He's definitely got the physicality We'll see how it plays out, but right now. I'm really impressed with what I'm seeing. He's even got the voice They nailed this they nailed this guys Zoe Kravitz as Catwoman Selena Kyle She appears to have a much larger role than I initially thought and she's got some big stilettos to fill Michelle Pfeiffer and Hathaway These are tough roles to follow, but she's looking damn fine here We get a good tease of the Riddler to start the trailer leaves a little question mark in his drink pretty pretty perfect, too Arguably too perfect. I'm questioning how he was able to do that, but he is the Riddler So questions are his thing. So Touche, I guess Colin Farrell who I've always thought is criminally underrated He's the penguin looks good has a couple lines in the trailer Nice way to end it with that Batmobile Which I have to say out of all the things in this movie the Batmobile is probably the lamest out of all the Batmobiles we've had over the year. Maybe I mean it's kind of like that Adam West thing back in the day It's giving me vibes of that it'll probably be awesome as they unveil more of it But as of right now I don't really care for it what I do care about and I'm really digging on is the vibe here Matt Reeves the director He's he's done some great work in the past clover field the last two dawn of the planet of the apes movies dawn and war I guess not I don't believe he did rise He hasn't done a lot of stuff. He takes his time. He gets it right and here. He's not afraid to play with the color palette It's a very dark and obviously moody film, but there's tons of popped colors here We have oranges at some scenes. We got some greens going on some blues He's not afraid to mix it up the other thing I was a little concerned about from the previous trailer was they didn't show a ton of action They didn't show a ton of different scenes where action could take place, but that's no longer a concern.  It looks pretty brutal. There's gonna be a good variety of action going on Batman's out for vengeance as he states again here Yeah, I'm super excited for this movie previously I was at like a 2 out of 10 in the excitement scale now. I'm 10. I'm up there I'm ready for this still eating the shot up where Batman's like Now it cuts to a shot of Selena Kyle like damn He's already dead the Batman movies have always had stellar music to along with bat nipples and a bat credit card Here it's also standing out for me Now I don't have a theme popping in my head right now from the trailer, but it definitely sounds awesome I think this is an absolute win for DC. This movie looks terrific. Very excited. Now. I want to hear from you though Leave a comment below. Let me know your thoughts on the trailer like the video if you got something out of it Subscribe if you want more out of it and hopefully I'll see you next time If you've been here for a while and want to go above and beyond you can join me on patreon at patreon.com Slash Adam does movies or right here on YouTube via that join button some people have done it It's very nice very helpful, and if you're one of those people that's currently doing it. Thank you very much


All right. My name is Dan Smith. I'm an engineer at Red Hat. Since I started with OpenStack about two years ago, I've been tasked with making the live upgrade goals of NOVA come to fruition. Focusing mostly on NOVA, eventually someone's going to make me have to look at the upgraded issues of other projects. But NOVA has plenty of issues to keep me busy for a little while. So that's what I've been working on for a while. And today I'm going to talk about the progress that we've made, where we've come, and hopefully where we're going to end up before I go crazy. So I think we have people in the room that are like operators that run clouds. You all have a switch outside your data center. It looks like this, right? Yes. Yep. Sometimes it's a big red button or it's got like a plastic cover on it to make you not hit it accidentally. If you're not an operator or you're not sure what switch I'm talking about, that label helps. It's the run or upgrade scenario. So right now in NOVA we, well, not right now, but historically upgrades have been very simple in that you turn NOVA off for the most part and do your upgrade and turn it back on. We call that simple upgrades. That's the feature. Obviously that's not really the ideal way to do upgrades of your code because the cloud should never be turned off. But until now, all of the components of NOVA had to be on the same code level all the time. So this was pretty much the upgrade switch. In general, across OpenStack you at least can break the problem up into services. So because we have strong API guarantees on the external APIs of the various services, you can generally move forward one service to the latest release, make sure everything's cool, then roll forward the next one. So generally we try to recommend that people do Keystone, make sure that's upgraded, and then do something like Cinder and then Glance. And then when you're totally out of other things to do, then you do NOVA and roll that forward. So the APIs help us because NOVA consumes Glance's stable external API. And so you can move Glance from one version to the next without any sort of issues. And then they're only tied together on the external API there. But when you get to a particular service, you generally do the whole service all at once. And for a smaller service, that's not quite as big of a deal. For NOVA it's a huge deal because you've got NOVA everywhere. You've got just piles of it in every corner. And so turning everything off is just a real horrible thing to have to do. It prevents anyone from doing much of anything. So that's what we want to try to improve, at least from a NOVA perspective. The point I will make here, though, is I say turn the cloud off. And if you've not done it or you didn't realize, generally when you upgrade NOVA, you can avoid turning the instances off. So you may turn NOVA off from the perspective of the user can't actually create new instances and list their instances and do all that kind of stuff. But the VMs are actually up. And if you don't break your networking while you're doing your upgrade, then they mostly don't notice, except for the fact that the users can't do anything. So just to make it clear, we at least are able to do that much live upgrade, where NOVA can be switched out underneath and the instances can stay running.  Full-sum timeframe and before your deployment looked something like this.  You had, hopefully, a ton of compute nodes. You had a queue and the database. And for the most part, everything treated the database as the kind of central knowledge, central source of truth, and kind of everything went into the database for almost every operation. So you would have a request come to the API from a user, and the API would put something in the database, manipulate some things, pull some stuff back out, and then it would construct a message to send to some compute node that was actually going to do some work. So if you were booting an instance, the API node would put some stuff into the database, pull out a record ID, send it into the queue, and bounce around. What happens is when it comes out of the queue and goes to the actual compute node that's going to handle it, the compute node would generally have just like an identifier of some resource. And it would have to go back to the database, pull what the API node just put in there out, and act upon it, probably write some status updates back into the database and everything. It was all very, very database centric. So this is not necessarily a problem, but it does mean that all of the nodes that talk directly to the database have to be intimately familiar with the schema of the database. So anything that we were going to do to the code to make it tolerant of moving the database forward at runtime would have to be code that is running everywhere. And so we wanted to try to get away from this. We wanted to get away from this technique for other reasons as well, so it fit pretty well. So grizzly time frame, we made a little bit of progress. We had an effort that we called no database messaging and then no database compute, which instead of putting stuff into the database and just sending an identifier over the queue and then having the other node on the other end pull it back out, we ended up sending the whole thing that we were, that was the subject of the action over the queue to the resulting machine so that it didn't have to go back to the database just to pull out the thing that we were talking about. So if you're booting an instance or taking action on the instance, the API node would pull that out of the database, write some task state thing to the database and then send the whole instance over the queue so that ideally when it got to the compute node, it had the whole object. It didn't have to go fetch it again and that meant that it, we massively just decoupled the compute nodes from the database and towards the end of this whole process we actually got to the point where the compute nodes were not allowed to talk to the database. It was kind of our enforcement mechanism so that if anybody added any code that would cause the compute node to be, to directly access the database and therefore be dependent on the schema, it would blow up because we had kind of broken the broken that path so that it couldn't actually work. Problem with this is of course that when we pass the instance to the compute node, the compute nodes got to eventually write some state back into the database about the fact that it finished it or whatever you asked it to do, it's got to make those changes and then of course every 10 minutes or every 30 minutes you've got periodic tasks that run that have to take action in the database. So we introduced a new service into Nova that was very simple and scaled horizontally very easily and was relatively easy to predict. You just, if you're running out of processing capacity, you just start more of them and this service served to give those compute nodes a path back to the database when they need to actually make a change. So we call that the conductor node and it's in a little flashy bubble because it was a highly contentious name and it doesn't really conduct many things but anyway, that's what it's called. So if you've got a deployment and it runs Nova conductor and you're wondering what it's conducting, that's the, it's primary task there. So that provides us the ability to mostly pass the big subject of an operation ahead of time to the compute node and then let the compute node use another service to write changes back to it after it's done. And so that keeps all of our schema sensitive code all away from the compute nodes of which you have the most of, right? So the goal here is to try to compartmentalize the bits that have to actually be really, really concerned about the schema. So we made that progress in Grizzly and we were hoping to, at the Havana Summit, we were hoping to make Havana our first upgradeable release. So and when I say upgradeable, I mean live upgradeable which means we were going to hopefully land a bunch of things in Havana that would allow us then to live upgrade from Havana to whatever I would be at the time. So we'd made this progress in Grizzly. We had decoupled all the compute nodes from the database. The problem is we were basically just remoting the same DB API calls that we had before through this RPC mechanism. So while it wasn't using an actual MySQL connection to talk to the database, it was still doing basically the same queries and the same updates. So it was still fairly tied to the actual state of the database and then of course when the API node would pull something out of the database and send it over the queue to the compute node, it was just whatever the database barfed out. And so it was very schema sensitive to that as well.  And the other problem with this is that in order to pull something out of the database we would normally get a SQL Alchemy object which despite how hard you push won't go through an RPC channel. So we had to basically serialize everything to JSON and then once you send it over the RPC bus to the compute node, it's never anything more than a dictionary. So we lost a lot of kind of rich object functionality that we had before like type checking and that kind of thing. But we had gained this conductor service which provided us a little bit of insulation which means we could start to adapt our approach and not have the nodes actually running old code directly talking to the database. So when we rolled forward to the next release we could have code in the conductor that still serviced that old API or that old schema but that gave us a chunk of code that was gonna be switched out that was in between the compute node and the database so that we could actually effect this change. The other problem is that what I just said we have now all the compute nodes using this conductor interface which was great for the isolation point of view but all the other nodes that could talk directly to the database were using the database API. So we had like a duplicate of all of those methods in each one of those API definitions which meant that they weren't always exactly the same and they would drift a little bit and we'd add a feature to the database API but we wouldn't need it for a compute node and so we wouldn't add it to this API and it got a little confusing and then of course we do occasionally reuse code and so we would have some code that needed to put something in the database either over RPC or direct to the database and if it was used by two different components that had different policies of whether it could talk we ended up passing API objects around and it got really, really ugly but it was kind of our first step to breaking those things apart. So in Havana we made some more progress towards addressing some of those issues. Specifically we wanted to simplify how all of that worked. We didn't want to have a database API that some code used and a conductor API that other code used and people have to know which API they were allowed to use where their code was going to run and which service, that kind of thing. So we started this effort that we called NOVA object and we usually shorten it to object or objects which is very conveniently confusing because everything has an object and so when we talk about the impact to the object or whatever we're always talking about NOVA object of course but it gets a little confusing. So formally we call this NOVA object and it really helps unify in a kind of an object oriented way how we interact with the database and how we pass those objects from like the API node all the way down to the compute node. The nice thing is that it's used everywhere and it lowers the bar to if you need to add a new method that operates on some data or you need to add a new field to an instance, something like that, the architecture helps make sure that kind of make sure that you get that correct. So instead of just adding a new raw RPC call that you're passing some blob of data to it kind of helps bind all of the upgrade sensitive things together. The RPC call that you're going to make, the data, the new piece of data that you're gonna add, the version tracking of all of those things, it means that we're able to add new things much more easily and get it right the first time instead of having to iterate. We find out that it's broken for one upgrade and release and iterate it there. So it helps us to get it right the first time. It bundles a set of methods and a set of data with a version into a single package so that we have kind of a concept of what the instance object looked like in Havana versus Ice House and what it means to take an instance object that we need to pass to an older node and back port it to that old version. So if you've got an Ice House node that pulls an instance out of the database, we know that the Havana nodes need version 1.2 of that instance and we have a defined routine that can back port it so that we can send it over. Whereas before, we were just taking whatever was barfed out of the database and shooting it across and so if there were two different versions of the code, one of them was expecting an old schema. We didn't really know what they were expecting or how to back port it because we hadn't codified all that. So this really helped us define the format of the things that we were sending over RPC whereas before it was just whatever the database at hand is. And then additionally, kind of inconsequentially but the object itself kind of automatically serializes and deserializes itself so you can pass it over RPC efficiently without this kind of generic turn the whole thing to JSON and it's JSON forever. So when it ends up on the other node that you sent it to across RPC, it rehydrates itself into this rich object and we get better type checking and kind of bounds checking. So we have a whole bunch of tests for example that pass a dictionary to a piece of code that looks kind of like an instance but we've got an ID field which is actually an integer but we've got it as a string because the code doesn't kind of really care and then you run that on Postgres and it totally blows up because Postgres cares. So it really helps us to better define the data that the code is working on. So we did a lot of object stuff in Havana or we're far from done but we put a bunch of that stuff in that was going to provide us the launching point to be able to do our live upgrade to Icehouse so that we had defined what very, very closely what messages were going across the bus and what we needed to do to Backport and that sort of thing. So for our first live upgradable release instead of just going full on you can shoot any node in the head and upgrade it at any time we defined kind of two sets of the problem. We were gonna require you to upgrade the control services atomically so that's your API nodes, your conductor nodes, your scheduler, that kind of thing. Hopefully the things you have fewer of and those have to go with the database schema. So the database schema upgrade we know is painful and long-lived and so that still has to happen. It has to happen in conjunction with these other services. However, you can roll all of that stuff up to Icehouse by itself and leave all of your thousands and thousands of compute nodes alone so they can still be running. Thank you. They can still be running Havana code. Yes, thank you. So I promised I'd pay her, she did that. So this is a major improvement I think because you've got all these compute nodes. They can all mostly stay the same. You can upgrade your database, your control services, get them all up to the level of Icehouse and then you can start picking off your compute nodes as it's convenient and upgrading those to Icehouse as well until everything is done. So this is not the unicorn, but it's getting there. It's a step and I think it massively reduces the size of the problem. In order to make sure that this worked, I mean this sounds great, but we really wanted to have some strong verification that A, this worked and B, it didn't work like Tuesday and then break on Wednesday because it is actually really quite easy to break. So towards the end of the cycle, we had a new job startup in the upstream gate CI system that would start a dev stack on Havana and it would run the tempest smoke tests against it and kind of make sure there's some data in the database and that is a running functional Havana setup. It would leave the compute node running and it would shoot in the head all of the other services, bring them up to Icehouse code, run the database migrations and start all the services back up so you ended up with another dev stack running but that everything was Icehouse except the compute node and then it would run the tempest smoke tests again and make sure that it still worked. So we did that, we found some kind of lingering issues. Once it started working, we promoted it to voting. So now try as you might if you go and introduce some patch to Nova that breaks the upgrade cycle for this well-defined procedure between Havana and Icehouse, the gate system will kick your patch out and say you're not allowed to do that. Obviously there's a lot more we could do for that verification process but at the very least it's a pretty well-defined box of functionality that we test on every single patch to make sure that whatever you're proposing is upgradeable from Havana without having to restart your compute node. So in Icehouse, this is what you've got.  Then when messages come from the newer API nodes through the queue and they hit a Havana compute host, they're gonna have a version number attached to some of these objects that is the version number from Icehouse. The object infrastructure that kind of sits around the compute node now looks at the version and say well, I don't know about version 1.7 of the instance, I only know about version 1.4 and that architecture automatically kicks the object out to your conductor which you've already upgraded and the conductor can backport the instance object to the version that you say you know. So this happens kind of automatically and so as soon as you get your deployment to this system or to this state where all of your compute nodes are old and all of your control services are new, you're taking this kind of indirection penalty for every message that's going across. However, as soon as you upgrade one of your compute hosts to Icehouse, suddenly it's fine with the object version that it's being sent, it stops kicking things out to conductor and you stop taking this indirection penalty. So this happens for each individual one independently and once they're all upgraded then you stop having to do this little bit of indirection. The really nice thing about this is that you may want to take some downtime on your actual compute nodes while you're doing this big upgrade, right?  So the migration messages that go between the compute nodes to move instances around will honor this as well. So you have a newer Icehouse node and an older Havana node and when you try to migrate an instance from the older to the newer, they have to speak, right? And the conductor will do the same object translation for the node to node communication as it will for anything else. So as part of this Havana to Icehouse migration path that we've got, you can actually cold and live migrate your instances from Havana nodes to Icehouse nodes as part of your upgrade. So you can go through, you can add a couple of clean Icehouse nodes, migrate or evacuate a whole Havana node to an Icehouse node cleanly, then shut the Havana node down, do whatever you need to do to your upgrades, your kernel reboot and everything, boot it back up as an Icehouse node and then you can evacuate another node to it. So this is a pretty, you like that too? Sweet. Yeah. So this is a, thanks. This is a pretty big improvement as well because you really get away from the point of having to bring down instances even to do hardware maintenance and kernel reboots and that kind of stuff. So then when, like I said, when your last compute node goes to Icehouse, it gets its upgrade, it stops taking this indirection penalty and then your overhead goes to zero totally. So you're all the way back to a regular deployment. There's really not much you have to do to get back to this level of functionality just stops happening as soon as the compute nodes are receiving objects that they know about. So that's the Icehouse upgrade path. So obviously we're not done because I put an X through the unicorn and we can't stop until we get there. We've mostly baked these objects into the compute node because that's the big thing that we really care about making sure that we can isolate the compute nodes from the upgrade process. But obviously we wanna break down the group of things that you have to do atomically into as small pieces as possible, right? And right now everything except the compute node has to be done in conjunction with the database schema which is not ideal. So continuing to push the objectification of the other services will help with this. Nova API would be a nice thing to get upgraded fully to objects because then we can decouple the API service from the database schema. If we kick the scheduler out of Nova, which we do a lot, we kick things out of Nova constantly. Really hoping to kick the scheduler out. If we do that we'll get some other sort of kind of stable API between Nova and the scheduler which will help us prevent the scheduler from being too dependent on what our database schema is. So that will reduce the scope of the things that have to go atomically to just the conductor and the database schema. So ideally we would break that apart as well. There are a couple of different ways to do this. I would really like to be able to upgrade the Nova code first and have it be tolerant of the old schema and the one that it expects. I think that our use of SQL Alchemy might make that actually a little bit more complicated. So we may end up having to do the opposite which is change the way we write our database migrations to only be additive for like the whole cycle and then have a migration at the end of the cycle that drops all of the cruft that we're not using anymore. That would allow us to do the upgrades, the schema upgrades in parallel with regular operation. And then when you start to upgrade the conductor node, the object layer will then kind of on demand do the data migrations once the schema has been upgraded to have these new columns that we need and we have that the objects layer provides us the isolation to do that independent of the rest of the code that might need to know about it, the problem is we don't have a really good way to do that with SQL Alchemy migrate right now. So Alembic, moving to Alembic might provide us the ability to have kind of additive and a subtractive migration path. Alembic, it's a schema migration tool. So anyway, that's something that we all are looking forward towards being able to move the database migrations completely out of doing any of the code and have the code be able to be gracefully upgraded in individual silos. And then of course, the more complicated we make this, the more diligent we have to be about testing it to make sure we don't break it because I can break it all day long. So we have this kind of single node setup right now where we have a single compute node, we upgrade the rest of the services, and we make sure that works. We don't actually run a full Tempest run against that, so there probably are complicated functions that wouldn't work in that upgrade scenario that we don't know about, so moving towards running a full Tempest run against that would be good. The problem is that whole process takes a really long time, and it really sucks to be the slowest guy in the gate. So it's kind of a big deal to run a full Tempest run and then do your upgrade, then run another full Tempest run if you've got a two hour long job, it's just not very good. So we gotta figure out how to do that more quickly and expand the test coverage. And then the other thing is it's not super realistic if you don't have multiple nodes, right? If you don't have like a upgraded compute node and a not upgraded compute node all talking to upgraded infrastructure. So we really need to get multi-host testing in the gate done so that we can actually have this kind of very split deployment where we've upgraded our conductors but not our API nodes and two of the three compute nodes or whatever. So the triple O guys I think are probably gonna end up helping us out with this. They're working on some gating that does like kind of real deployments and would do that across multiple hosts and hopefully let us simulate a more realistic environment where you've got more than one compute host because aside from on my laptop, single node clouds are kind of boring. Yeah, complicated, huh? I really haven't looked at doing this for any of the other services. So from a Nova perspective, if you're using Nova network, all of the things that I just described are true. If you're using Neutron, then you've got whatever their upgrade requirement is which I believe is the agents that run on the compute hosts have to go down with the Neutron server and come back up. But ideally, once we get this figured out for Nova, we should, anything else that runs on compute hosts should follow a similar kind of strategy so that we can avoid having to take down all of the Neutron components at a time. This is really specifically just for Nova at the moment. Yep, probably. Sorry, I'm still listening to the question. Go ahead, say it again. It could, the question was can you hot patch the code that's running in the compute host to understand the newer version of the object so that you can stop taking the, stop taking the indirection hit? I mean, at that point you've restarted the, so we could talk about like backporting the object layer to Havana so that you could end up taking a small upgrade to all of your older hosts that run newer object code but no changed Nova code that would be able to tolerate the new version of the objects potentially. But we don't have a versioned interface between the object's layer and the stuff that sits above it, right? So it would have to change that a little bit about how we do it, but we could. So the thing that usually is the biggest performance hit on the conductor nodes is the fact that they are doing a lot of database for you and they're mostly blocking when they talk to MySQL because of the way we do EventLid and use our MySQL driver. So I think that in order to sustain the performance that you need for your cloud, you've already got them pretty well scaled out and the hit that they take when you do this indirection is purely just CPU. So I think that you probably are gonna have conductor hosts over-spect from what you need for this particular activity anyway. I'm not sure if that makes sense, but it's not, it's the least complicated thing that a conductor node has to do, so. What's it, sorry? You certainly do. So yeah, I mean obviously this is the first release where we supported this functionality, right? So please tell me how it goes. But potentially you could generate a lot more load on your conductor. Yeah, you don't get any of this if you use local conductor, right? Yep, obviously because you haven't upgraded your layer, yeah. That was the last slide, so if anybody else, yeah. Okay. Oh, look at her waiting at the microphone. I am, all nice and tidy. No, it's all good. Really around the schema independent with the conductor. So we get to where we're using conductor. We have this great breakout and then Nova's going to be looking at these schema options. Where are you all in that conversation? Are those things that are going to happen this week during the design summit? Yeah, so I've got a compute track session tomorrow or the next day to specifically talk about what we need to do for the next cycle. And I would like to propose that we try to be only additive with our schema migrations for the next cycle so that we can try to have some testing of applying the schema changes underneath currently running code. I haven't actually looked at the migrations that we may already have in the Juno tree, so we might have already broken that, but absolutely that's one of the next things we need to talk about. Okay, so that would just be a good one for me. I just came from one of the operator meetups and making sure there are at least a few of us that are doing more of the deployment and the operations of it to see how that is going to impact us. Yeah, I know it'd be horrible to take away the fun for the operators of applying those migrations, but. I know, it would be worse to have to do them all at the very, very end. Oh, well, no, I'm not saying. Even just the cleanup ones, that's just kind of what I wanna be part of the conference. Well, the cleanup ones, you would be able to run whenever you want, right? So if it's purely additive, it would be the kind of thing where, this is the problem with our current schema thing. We have this linear version number and so we don't have this really nice ability for you to insert a migration into the path at some point that doesn't affect anything, but ideally we would make it so that you can apply pieces or all of the subtractive migration whenever you want, if we get the code to the point where it's doing that migration for you. So yeah. So that makes me feel better, yay. And then has anybody that you know of actually done this yet? Anna, like a big, real cloud? Yeah. Thanks for bringing that up, no. Well, no, and I'm just saying, I'm just saying that I've made this. It's only been like three weeks that it's been out, so. What's that? Oh, there you go. I know what we're gonna be doing the rest of this month now that we're here. Yeah, so we'll let you know. I'll go on vacation or something. Yeah, I'm sure you will. Yeah. Well, now we've got the gate job, so Jenkins will just smack you if you break it, but the one thing that we would really love is for people that are adding other features that aren't necessarily objects or upgrade related to look at it from the upgrade perspective, right? If you are doing anything that talks to the database or uses any data out of the database, but that isn't using an object mechanism to do that, it would be really great if you could prefix your patch with something to convert the old style to the new style and then make your code use objects instead of the raw database API, which just really, really helps make sure that more code ends up with this isolation layer between it. So that's probably the easiest thing you can do is if you're adding code or proposing adding code that talks to the database API at all, don't, and use the object API. That would be perfect. Is it version of the object? Or is it straight forward? Most of the objects are created, so if you are looking at instances or aggregates or migrations, if you go into the objects directory, there is a thing for that, and what's nice is the database API is like 500 raw functions, and the objects are all broken out by thing, so if you go look at the instance object, just the instance related methods that you can do are documented there, so it's actually a little bit easier to find. It's just most people are used to looking at the database API. Anyone, but Josh? No, it's okay. Go for it. Yeah. Yeah, Ironic does. Yeah. I haven't been pushing and some other people have. It would be nice because the Ironic and Nova have diverged a little bit, and that's the point of Oslo, right, but yeah, are you volunteering? It's definitely something that would be good. Yeah. Well, yeah, having a pattern for each of the services that you know to follow, I'm sure the operators would appreciate that instead of something totally different from each one. We've already got a different DB sync command for every project, so that's probably the Ironic, right? So, I think there's like two more minutes if there's other questions. Meaning, predefined sequences? Yeah. Well, that's like what Josh was saying, like having the same process for each of the things to hopefully make it work would be great. Yeah. Really? Cool. I don't know that I would know, but I mostly ignore those guys are kind of weird. All right, I guess that's it.


I was going to make a video on this when it was brand new information, but I knew that this was high for people abusing it, so I held off. New information has been dropped by Amazon, and it's being said that this is a bannable offence. Personally, I don't think anyone will get banned for this, but it does go to show Amazon ain't taking any prisoners when it comes to exploits. And one like this truly does ruin a massive side of this games economy. Today we're getting to it all guys. How's it going people? My name is DPJ and if you enjoyed the video, leaving a like really helps out and if you like what you see and want to see more, be sure to subscribe. Okay, so the day before yesterday with the 1.0.3 patch, New World introduced this server transfer feature, a feature I myself haven't got to use yet due to them taking this feature away as it caused an issue for some players. While they say issue, it's this issue which people were abusing and could result in them being able to duplicate gold. Yes, you heard that right. So after the New World 1.0.3 patch update, the new server transfers made it so that some characters were in an invalid data state that prevented them from properly saving their progress. What this meant was guys, they could load back into their servers and transfer all their gold to a friend. They backed out of that server and reloaded because the game didn't save their progress because New World didn't save their progress. They would reload back into that game world and still have all that gold they just transferred to another player. But the player they transferred that gold to keeps it and they could just keep rinsing repeat in this process and therefore basically get infinite gold. People also started to notice that this lent itself to a bug where players could create a new character and transfer items and gold and find those goods in both accounts without repercussion. This stems from the persistent error that could result from transferring a character to another server. So yes guys, this is kind of a massive exploit. While I don't feel too many people are exploited though, I mean there were a few people that did actually complain about this issue. It isn't reported that too many of them though actually exploited this bug. Now New World Community Manager, Alexandria said, all of these transactions are logged in our database. We are reviewing them and any players fan deliberately using this condition to gain an advantage will be banned for exploiting. They also say the developers will remove the items and gold were appropriate since some players kept it for themselves or others traded or sold them to others. Now I see why they put any statement out there. They want to actually just get it set in stone that anybody that does exploit will be banned or punished for it. Now there's genuinely going to be some people out there that did this not intentionally and it resulted in them getting more gold than they should have. These are the players I don't feel will receive any punishment whatsoever. But for the people who figured this out and made tons of gold off it, there could be a bigger punishment for you guys. What we will see, we will see. Now an exploit like this is pretty big news. I mean gold within New World is something everybody needs more of. If you write New World Gold into YouTube, the amount of videos come up about glitches and exploits and how to make this, how to make that. And although some of them are pretty decent, they do take absolutely hours, even days to master. A lot of the formats we are seeing are basically farming and selling certain items. Keeping an eye on what's selling, what's needed, this, that and the other. Then you just farming, crafting or whatever and selling that kind of item. I mean it makes sense because the trading system within this game is a massive part of the game. Amazon and New World just don't want to be giving gold out too easy. As well like I said it ruins a massive economy in the game. So any kind of exploit like this where gold is involved, I'm pretty sure Amazon are gonna come down on it super fast indeed. And like I said, as soon as they figured out an exploit was actually within the game where gold could be duplicated, they took out that server transfer feature. Like I said, I'm left now still on my same server. I was hoping to jump on today and transfer. That isn't a possibility now. Hopefully they get this fixed so I can do that. But yeah guys, like I said, there was a gold exploit in the game. I don't believe you can do it anymore, but even if you can, please avoid it because you will get banned. According to Amazon games anyway. Well there we have it guys, the end of the video has arrived. If you enjoyed it leaving a like really helps out. If you're new around here and want to see more, be sure to subscribe. And if you never want to miss a video I upload a can turn notifications on by hitting that bell button. But guys, thanks as always for stopping by and hopefully I'll see you on that next. One.


A partnership to empower young leaders has been formalized as the Minister of Youth Development and Sports has partnered with the United States International Development's USA Youth Resilience Inclusion and Empowerment Wiry program to launch the youth work program for effective youth work practice which is aimed at enhancing the skills of youth workers. This collaboration symbolizes the synergy between two entities committed to shaping the future of our communities through the lens of youth development. Our endorsement to professionalize youth work is more than just an idea or concept. It embodies a commitment to investing in the potential and aspirations of our young people. By having our youth certified through competency-based curriculum, driven by Wiry and the Tiviat Council, we are fostering an environment where innovation, inclusivity, and mentorship pave a solid foundation for the leaders of tomorrow. Chief of party, USAID, Wiry, Phelps Feely stress on the significance of this partnership. The youth work program for effective youth work practice is a strategic endeavor to strengthen the ministry's role in confronting the wide-ranging challenges St. Lucian youth face through a comprehensive, practical, and community-focused upskilling effort. It includes the rollout of a competency-based curriculum for level two Caribbean vocational qualification standards for youth development work in partnership with the Tiviat Council, support for professional development, strategic planning, and effective community engagement with the ministry's youth division, and will ultimately, as Mr. Lemont said, will boost youth resilience against social challenges in communities throughout the island, where the ministry's phenomenal youth workers and youth officers lead interventions, programs, activities, and organizing efforts on a day-to-day basis. Permanent Secretary in the Ministry of Youth Development and Sports, Mary Wilfred, noted that the ministry has had the development of the skills of its youth workers high on its agenda. The ministry recognizes the urgency for this technical assistance to strengthen the effectiveness of our division, our division of youth work, for our planning, our programming, for community organizing, for organizational coordination around the island. Therefore, this partnership is coming in at an opportune time so that we can deliver this youth work curriculum called effective youth work practice. This is the crux of this grant agreement, and this is the reason why we are here today. Dwyneth Eversley, Regional Learning Director, USAID YRI highlighted the importance of recognizing the professionalism of youth work. So professional youth work organizations exist in many countries. In essence, it is an effective way of halting the misunderstanding and rigid attitudes that attend to how young people are viewed and treated, especially the young people we intend to reach and we need to reach. P.S. Wilfred talked about the activities that need to happen supported by this ministry for a paradigm change in working with young people and in creating peaceful, secure societies. And that's part of the agenda that you are framing through this professionalization of youth work practice, especially for youth at risk or those not in the mainstream. The USAID YRI program was formally launched here in February 2023 and is working with government and other partners to strengthen social services that serve youth and their families, improve learning outcomes for youth, improve youth preparedness for the world of work, and strengthen the resilience of families and communities. From the Ministry of Youth Development and Sports, I'm Ryan O'Brien.


Okay, so I am P.P. Bhatwani. I work at Coug Tomorrow. It's an Australian health care start-up and we are basically into building health care apps for people and impacting their life in positive ways. And we have been talking about react-native, clutter, native script. So I'm gonna, I'm here to talk about testing in react-native. So do you want to learn it? Are you excited? Yes? No? Okay, so how many of you write tests? Raise your hands. And why do you think that testing is important? Anyone? Like, what? Client? Okay, okay, so I also have my views on it.  Okay? So when I started working with react-native project, I started small. So I started writing the UI components in the projects. And there was a component like blank card, which will like, if you pass anything to it, it will render into a very nice card view inside a very nice card view. So what I had to do is I wanted to write a test for it so that no one should mess up with the style of the card view. So the easiest way which I could start to write the UI test in react-native was snapshot testing.  But when you have a snapshot test and when you run it, if the snapshots are not there, they'll get generated. And if they are already there, then it will compare with the old snapshots. If they are the same, then the test will pass. If something has changed, then the test will fail. And then you can, you have to see and like what has changed. And if it was a required change or not. So for, I wanted, I wrote a test for the card view. So blank card, sorry. So you have to import the renderer and then you basically pass the render, the blank card to the renderer and create a snapshot. And when you do yarn test, it will generate something like this, which you can like understand. You have to look at it and see like what exactly is happening. I passed a text to it and it's just rendering inside the card view. And it gets saved. So tomorrow, if anyone will make any changes to my blank card, it will, it will fail. And I'll, I'll, I'll see that if it's, if the change is fine, like it's, it's the style, we have to change the style. I can just run a yarn test minus you update my snapshots. Otherwise I'll tell the person that please don't mess up with my styles. Okay. So there is that was about snapshot testing.  So and the one that any time you make any change, your test should run for that particular code. So you can just do yarn test minus, minus watch, and then it will run in an interactive mode where if whenever you will change, make any change in the code, the test related to that code will run.  So it was really useful for us. And like when like writings, we saw that writing snapshot was really easy. So what I did, like I started writing some tests for all the components. But over time, I realized few things and I want to share with you like my learnings about snapshot testing. So what I realized is it's important to have short, short tests about like for the smaller components rather than having like if your component is too big, and if you're writing a snapshot test for it, it will generate a really big file, which will, which will be really difficult to go through and understand. So it's if you have a small component, then writing a snapshot test will be really good thing. And also, you need to have a good review culture. Like I told you that you can update snapshots like just like adding minus you and it will get updated. But suppose you your tests are failing, and no one is reviewing in the PR that what has changed in the snapshot, and they're just doing that yarn test minus you, they'll just test will pass. And then even if it was not intentional, it will get more. So it's really important that you decide a good code review culture in your company that whenever there are snapshots, have a look into them and see that it was like whether we want to update the test or not. And describe the test with meaning like this is really so important, because your test ultimately become documentation for people like who are going to just look into your code. So if you have written what exactly this test is going to do properly, like just describe it properly, then other people are going to understand like why what like why it is there, like what is the use of it. So moving on. After writing UI, I go like I went ahead and I started writing bigger screens and more logic. So there was this one screen we had my strategy. It's from an app which was basically tell you task if if based on your sleep, like if you're not sleeping properly, it will show you the task list, what you have to do to improve your sleep. And then if you the if this avatar you see, it's a nurse which like just shows the random messages based on your progress. Like if you have completed all tasks with a well done, and if you haven't completed, it will motivate you to do that. So my job was to write a method which will generate that random message based on different conditions. So we encourage and we follow TDD in our company. So what we tried to do is we try to write test first with the expected output. And then we write the logic. So I did the same like I started writing a test. I wrote a test that which is going to fail because there's no logic there. So I wrote that what it is what it should do. Then what is the expected behavior what I'm gonna get from the method get nurse message. And I was doing the session. So after that my next like I want had to decide that whether where should I write this get nurse message. I could either write it in my strategy screen and call it there itself. But my strategy screen was already very big. And I realize that if I'll put it there when I'm testing my strategy, I might have to mock that method. It's better to take it out and you know run it in isolation. So what I did I took it out in a class and then I wrote the method. So because I had tested my application and this has happened many times whenever I want to write a unit test. I could you know break down the bigger problem into smaller smaller things because I had to write methods which are testable small methods because if I start writing a big method, it will become difficult for me also to write the test for it. So writing unit test helps there a lot and also better architecture. So I'll tell you that whenever I wanted to write a test, I have if I'm not able to do anything, I try to figure out that what will be the good architecture. Like sometimes in Android, you have to follow a MVP pattern to be able to write unit test properly. So because you want to write test, you will go in that direction that you'll try to find ways of how you can code better. So this is this was like my experience. And that's makes you productive developer like if you're writing this. So the test which I wrote finally was like this. So all I had to do is after writing the method, I had to I had to pass the proper props to it. And that that was done. And while writing unit test, many times like I faced problems, like, like, how do you mock things? So there are like, if you go around, there are like mocking libraries and if you learn about how to mock functions in just so it is it is really easy like here, I've had to mock a random number generator method. What I did is I use the chest or mock method and I did I passed a method name, which I wanted to mock. So if you like if you feel that writing unit test is difficult, like it's it's not that difficult, you just have to find the right resources and then you can do pretty much everything in that after like, okay, so after learning about unit test, I wrote a few tests, all of us and then it was time to release the app. And but you know, like, if you want to release that we have to test the end to end close right properly and being into healthcare. It was really difficult for us to, you know, because in healthy, how to collect data, like you have forms, you have to collect data first and then based on that data, you have you show the task or whatever you want to do. So just imagine like writing like manually testing all different scenarios, we're like, and every time something is changing, again, you have to, you know, test everything. So what we want what we decided we'll write an e2e test for those things like the scenarios which are really important. And there was like detox, we went with detox it's an end to end testing framework for react, you can write your test for react native. And we wrote mostly the e2e test for iOS. It's also available on Android side. When we had tried, we were not able to run it properly on Android, but I think recently they have added more support to it. So and after that, like we decided what are the critical flows in our app with our product manager, and then we wrote e2e test for this because writing e2e test is like time consuming. When they run, it's really time consuming. So it's it was really important to decide in the talks, basically, you can write test using mocha, just and cucumber. And we wanted to write using to come up because we were already using it for different projects. And also, like when I'll show you the test, you'll also understand that how like why it is helpful. So if you go to the documentation of detox, there is already they have mentioned the like how you can, you know, take care of the test with mocha and just and we couldn't find like some how to set up with cucumber. So we asked it and you can go to this link and find out how you can do the setup. And then yeah, go like we went through the documentation did all the setup, you can follow the link here. The directory structure was like this, like we had an e2e folder. And there was a feature folder inside that we had a feature file. Basically, that's the test file. And there are some common steps to run the test. And hooks was to just set up the detox. So like if you go through the detox getting started guide, you'll get all this, like how you can set it up. And finally, let's try it, see some tests, some e2e test, you know, so I'm going to take an example of very like onboarding, because so that we can understand it better. So we had this onboarding component. And when you want to access anything from a component, you first have to give the test ID to it. Okay, so you give a test ID so that you can access it when you're writing the test. After that, we you write, we wrote a feature file. Okay, so we decide, like you write that, what is the feature about on boarding feature? And then this test ID basically is used to when you want to run the test. So you give this to detox that please run this test for me. So this is that one. And then you write the scenario. So this is in cucumber. So that's what the test if you write it in just a mocha, it will be different. So you write the scenario that I should be able to click the next bus button. And in cucumber, like going through cucumber is like out of scope of this talk, but I'll try to cover few basic things which are here. So given given and when then there are few keywords in cucumber, which helps you write the test and has some meaning like given, when you want to set an initial context, you say that I'm shown an onboarding screen. And if you want to continue that you add and keyword and then continue with that and I can see the agreement model screen.  And then what should happen is you write it and then that then I should be shown the welcome screen. So this is like this was the like the test and like these statements, we had to like you have to write it. And like you have to write that that was like just for like, if you can read it and understand it, even if you sit with a product manager, they can sit and understand that but inside like you have to write the method of how it will work. So that given thing which I showed that I'm shown the screen. So here you basically passed the ID which we gave like the onboarding is the ID of the screen. So I'm shown the onboarding screen. It will go and try to these find the onboarding screen like and we are using the wait for add index and to these are like methods by detox so you can use these like I'm waiting for this element to come at index zero and like for some time we are waiting after that we are expecting that it's exist on the screen. So like this you have to write the description for all the steps, whatever are there and it's really easy like you can write this and make it like a method which you can reuse at multiple places. So this is just simple example of that.  So first you have to build a test in the talks using the talks bill command and you say that this is the configuration I want to build it. And after that, because like if you're not using cucumber, this the running step will be different. But we were using so cucumber. So we had to say that where the cucumber is where we are doing, where is our test and the onboarding minus t is the like which is the test we want to run at onboarding. I told you like remember that we gonna use it while running running the detox test and which is the configuration you want to run. And finally, it will look like this. It's basically how we do that it should go to the next step and then I should be shown a welcome screen. So all that steps will happen and test will pass like if anything is failing, then we come to know that there is a problem. So writing this test was like if suppose we didn't have this test, then every time the change is coming, we have to do it. But because we took time to write this once. Any time anything changes, what we did is we made a test suits of test which are really important. And then every time we have a release, we run that test suit on circles here for like maybe three hours. And then we know that they are all that like if those tests are passing that we make sure that we are these features are not affected by the change we have done. So my like, now I'll tell you the reason like why like testing is important for me is I feel that it helps us to write like documentation like you can write if you write your test properly and if you define describe them properly then anyone who is coming, we can you can ask them that just have a look into the test. If you don't understand then we can discuss more about it and I'm pretty sure that they'll understand that what's going to happen from that and you can refactor you refactor with confidence because you know that if test are passing you're changing anything and test are passing that means you're not affected the areas and at least to better design and and better user experience also because if the test are there then you have the sorority and your app which you got your and user going to use is going to be crash free and bug free less bugs at least. So that's it. Thank you for listening to me and I hope this really motivates you to write this and make you you make testing your friend like I have. So if you have any these are few useful resources I forgot to add one there is like a site called I'll share it later but that site has like different problems in different language and it all already like when you select a problem they all like have the test in it already described for you. So it helps you build going you know moving towards TTD. So you can then write the logic and run the test and if you want you can add more test as well. So if you want to improve that you can you know ask me I'll tell you the site and you can do that and if you want to reach you if you want to have any any questions you can miss email me or I'm very active on Twitter you can ask me on Twitter and let me know if you want to know anything I'll be happy to help. Thanks pretty any question.


Aging is the main risk factor for chronic age-related diseases and geriatric syndromes, and they share a common set of basic biological mechanisms. As a result, the primary target of medicine should be combating aging instead of treating each disease individually. This new interdisciplinary field, called geroscience, focuses on understanding the relationship between aging and chronic age-related diseases and geriatric syndromes. It is hypothesized that aging and chronic age-related diseases and geriatric syndromes are part of a continuum, with precise boundaries not existing and the two extremes being represented by centenarians who largely avoided, or postponed most chronic age-related diseases and conditions, and patients who suffered one or more severe chronic age-related diseases and conditions in their 60s, 70s, and 80s and showed signs of accelerated aging. In between these two extremes, there is a continuum of intermediate trajectories representing a sort of grey area. Clinical differences between classical chronic age-related diseases and conditions and accelerated aging are due to unique combinations of alter. This article was authored by Claudio Franceschi, Paolo Garignani, Paolo Garignani, and others. We are article.tv, links in the description below.