Welcome to AG MOOC lectures and in this lecture, what we will be doing is, we will be talking about the Sustainable Resources Management in Agriculture and then what we are talking about in the, we have seen in the agriculture practices is and the agriculture is a oldest profession or oldest activity which we have started, people started growing crops and then the water requirements are meant from river, lakes and then conveyance through the canals have been taken place, okay. So that is one aspect. The second aspect is as we started growing more and more areas are brought into agriculture. In that case, that because of our excess use in growing the crop, we have used started using pesticides, we have started using some chemicals, fertilizers and things like that. And then the third is whether the, there is a time requirement between one crop area, one crop season to another crop season to third crop season. So that there is a recuperation of aeration takes place in the soil which has been not done and another thing is there are crops, 15 months crop, 12 months crop like a cash crops because of the cash crop it is like you have invested more money in the crop and you have to get back that if it does not go happen then there are problems related to the social problems have started it. So now what has happened was, now there is going to be another dimension to the agriculture is and coming under the threat is about the climate change and we are not talking, we are not aware what type of change which we have we can handle it and how to prepare our self is our main issue. In that case then what all the information content whether it is documented, not documented everything in the same so that we can compare and learn and then do a different way of practices. So that was not available in the previous years. So now we have started documenting it in a digitally through this geographical information system or a geospatial information system where every the land portion is covered with latlan and things like that whereas whatever the activities which you try to do it that is all documented whether it has given us a good flip to grow and at some places what has gone wrong for it gives some sort of an evidence some sort of a data for us to analyze what has gone wrong and what has gone right and what are all the impacts after 5 years or 10 years these are all the things which we have learnt now. Now what is what we are looking for is this agriculture need to be a sustainable one that means that there should be a steady growth and steady output of crop yield is required to meet our populations in the year future and at the same time our resources like natural resources like water and storage all the facilities water those facilities are in a deteriorated conditions now how much we can spend and how much we can expect how much we will be able to share our resources with other people non-agriculture people is the question now. In that way what we are trying to do is we are trying to integrate all the parameters all the spatial temporal and local in a different levels different levels in the sense either in the regional level mid local level or in the farm level all these documentation is needed that documentations can be created using the GIS applications that is what we have talked about in the entire 7 weeks period now what are the different requirements for the sustainable agriculture in the forthcoming thing is you can sustainable achieved by identifying a unplanned agriculture practices in a particular area and overuse of natural resources that means the overuse and unplanned activities they may damage the system as well as the it may drain out our natural resources okay. So this needs to be identified needs to be monitored and it needs to be synchronized with the rest of the activities that is what the sustainable agriculture it may lead us to do that another thing is this we are talking about the smart agriculture smart agriculture is smart is something like that use little input get the maximum output that is what increased productivity is needed and I need to adopt things wherever is possible so that what is the reduction of CHG that means greenhouse gas emissions so that the global warming could be minimized or may be controlled from the contributions of burning of fields from the agriculture sector. Now the third aspect which we can do by this way is our crop area assessment is always done on a ground basis but which takes time but now we have remote sensing satellites and other monitoring devices which will give you about crop area crop conditions and crop yield predictions. So the another resources which we can use adopt in the agriculture practices is management of water resources depending upon the availability or non availability and minimizing the water losses and then minimum losses maximum production per drop of water or so forth. Third thing is about identification of the pest and attacks and how it is where it started and how it is spread and how to kill the other way around crop area assessment then major thing is when you want to go for a agriculture area expansion land suitability is one among them. The land suitability analysis is based on the aerial extent quality of the soil and suitability for a particular crop. The disaster management is related to drought or flooding or that kind of category whereas when it comes down to the precision agriculture where the crop yield predictions are very accurate at the same time the monitoring cost or the measurement cost it becomes little expensive and whether it is manageable or not that has to be seen on a larger period. So what is needed at this part of the time is there is a regional specific management plan that means identify this area needs to be done only with this type of crops and we are expecting it instead of variations within the region. The technology could be effectively used in assessing, giving or farmer related information accurately the identity of the system or identity of the region need to be preserved. Now there are degradation of land like what we said about in the soil salinity at a water logging and it leads to the environmental degradation which will prevent us to reuse the area for after a long time. Then another one is about the crop yield. See crop yield estimation is one thing and which are the areas which are having a lesser crop yield irrespective of the best efforts and finding a solution and doing a research on that is of prime importance when then growing more crops. When there are pollutions, when there is a rain then there is a take a pesticides and fertilizers are carried away from a larger distance and if it gets stored in a particular pond and then the pond develops certain environmental degradation. So these are all the things which is happening because of the agriculture related activity or groundwater gets nitrate and other issues, other elements which gets enriched and which makes the groundwater not drinkable in the near areas. Health hazards as well as natural hazard, these are all the hazard which we have followed it and which we can identify and contain this hazard to a lesser extent by using these natural hazards and health hazards can be minimized by making it awareness and which induces growth and then it damages. So these are all some of the areas which we have can have a suitable sustainable agriculture management. And in this thing, this geographic information system it can be in a different scales as we said is the farm scale or it is a plot scale up to the regional scale and that means that scales which we talk about is 1 is to 1000 scale as well as 1 is to 50,000 scale. So that resources especially the water resources which is available in the area can be accurately assessed and the demands can be met and interrupt out the water supply can be given into the farm sector. So that they will be able to grow and then give a sufficient crop yield to the country and making the food security important for these things. So this is what this course sums up with there are different water is taken as a primary one which is likely to be affected because of the climate change how this temporal variations. Another important factor in the sustainable preparing a sustainable plan is that we may have to have all these parameters in hand and we have to address these issues in a integrated manner not only in growth period sustaining it and then including the crop yield increase. Now this is the way wherein our aim in the near future is about measuring it, monitoring it and developing a different kind of adopting it different technologies in making the crop yield with a target of the crop yield. So that we will be able to provide enough security to the food for the forthcoming generation. Thank you.


Alrighty, let's check this out. Hmm, that feels fast. If I go into A.B. Controls and do half speed, wrap up. Alright, so I would do, yeah, I would do at least half speed, not at least, but to half speed here, maybe 40%. This definitely half speed, it's way too fast. And this, probably 30% slower. And I would also kind of tilt with it a bit? I don't know, I feel a bit worried that the camera is kind of static. There's all that movement and then here's only it's late in that move. You know, I would do that tilt to the left, the pan to the left, starting like here-ish, a bit more plausible and then you can cut out sooner. You know, like once you're here, cut. So you don't have the camera come to a stop. So I would cut on the camera. I think the scapulas and the shoulders are a bit much. That stuff is a big wiggle. But if you slow it down, it's going to help. I would still stone down that amount by 20%. And then I would add some head stuff. Like right now, it's always kind of the same. It would be neat to see that he's looking this way, you know, ears are like that, looks over there, ears are like that. There might be moments where, you know, if this is the alignment of the ears, maybe it tilts his head a bit, stuff like that as you continue forward. Kind of cool. But yeah, this, your internet activity over the last 10 years is being 10 years. It's still the same though. Last 10 years is being- So 10 years, years. You know what I mean? It's be years. Last 10 years is being scrutinized and cataloged. And it still feels like it's a mirror. Like you got to put some asymmetry in the lipstick. Is being scrutinized, scrutinized and cataloged. Vivid detail. Ooh, the head check is nice. scrutinized and cataloged. Here, when he goes from here into this, there's nothing going on here. Even if you just do like an eye dart from one eye to the other, it's going to help. Or a bit of a, a bit higher eyelids for a bit of a flare. It's because once you go and he continues the line, there's still nothing on in the face. But if you do, if you look at someone go in minute, just muscle wise, if you start saying things, it's going to activate and fire some stuff. So you can have a tiny bit of eyebrow rays. Something has to happen before, at least before, right before it says in minute. Careful your arc on that is weird. If you track the fingers, it goes up here, up here, up here, up here, suddenly to the right, suddenly down. You're doing this as opposed to a circle. So watch your arcs there. Your wrist is drifting up at the end. Watch that. This feels a bit weird how this arm goes up his screen right one, or his left and screen right one. I guess you're saying this goes up so there's more weight on this. But then if this goes down, to me, it would feel like that hand will go up. Like this part of the chair goes down because all the weight is here now. But when that happens, it's actually the opposite. You know what I mean? Like this section goes down as opposed to up. All the weight's gone from here because that arm goes up. So look at that mechanics wise. And then at the same time, when that hand, this part comes back down, boom, that would definitely impact his hand and this would have to go a bit lower. It would you would see some impact animation just a bit. So you feel the contact right now. There's nothing going on there in his right hand. Your internet activity over the last 10 years is being scrutinized vivid detail. Yeah, it's cool. Little things, little details. And yeah, it's actually, it's true. You can do, I mean, you can do a little looky look here, the whole thing. And you can put like, you know, a door. I mean, I agree. It could be something designated that this is a door.  But what you can do is change the colors of the interior so that this doesn't blend the door in the back. Careful in terms of animation. See how that wrist is going back almost in the same rotation. And it's, it's a bit fills with IK and then you pop over one frame. And then you have this moment here. See this where this goes from here to here, but then the wrist orientation is the same. So watch out for that. See this is a full IK arm going back. So you have to always be careful about arcs and wrist orientation. This is still weird to me. That it's such a wide look over there as opposed to a bit more towards us or here. What are you doing here Reynolds? You DVD player broken? That's cool. I kind of disagree with this. This feels really cartoony. Right where he sees this, right? He goes, such a big drop on controllers in the face. What are you doing here Reynolds? You DVD player, bro?  But then the voice is very flat and contemplated and it doesn't quite match what you're doing emotionally here. That makes sense. I will personally tone this down. You can stay somewhere around here, but not that. Even the eyebrows are a bit much, but the shoulder stuff is huge. And I still don't understand what's going on here. Like the head is the size, you know? If you look at the head and the fists, do you mean like what is going on here? I mean it's, let me know what kind of lens you have. You know, if this is a 35, I will probably go to a 60 or something. You don't have to move your camera back, but this just feels really weird, scale-wise. And you're also low where, you know, compositionally, the weird thing is we're in the middle. It's your center and he's, it's just centered a lot and it will almost be nice if he would be a bit more here. Obviously, you know, if he's bigger, this feels a bit better because then you have the thirds, which is, you know, it's cliche, I think to say the thirds in your composition, but it helps so that at the end, your character is here and any other guy is here. You know what I mean? Like there's a bit more, a bit of a nicer balance in terms of composition. All right, thanks. All right, there's an email you can sign up, you can start whenever you want, you can submit whatever you want, you get 16 submissions. Either way, a like and subscribe would be awesome. All right, thank you.


Hello and welcome to the next lecture in the course on Introduction to Computer and Network Performance Analysis using queuing systems. I am Professor Varsha Apte, I am a faculty member in the Department of Computer Science and Engineering IIT Bombay. So in the previous lecture we had looked at open queuing network and we have been looking at open queuing systems. So we will just look at some examples today. So this is a quick recap again, we have been seeing this slide several times, this is just for your reference, the little slaw we have seen now many examples also. This is the more recent recap, we have learnt PK formula for MG1Q and the special case of that is for the MM1Q where you take exponential service time distribution and then you can make a special case of this. Same with MD1, D is also a special case of G and you get this formula for response time. We also studied some properties of Poisson arrivals, again this is for your reference, we are not going to repeat all this today. Open queuing networks is a major topic we did last time which is this is again for your reference the parameters, the matrix all the symbols are here for your reference. The major results for the matrix were all these, we will actually do a major example where we use all of these. So please take a moment if you want to pause the video and make sure you have written this somewhere or you have your notes somewhere so that you can refer to it while we actually work on this example. So let us start with the first example. This is just an example to revise what the Poisson distribution is and its various properties. So packet arrivals to a network link are Poisson with rate 4 per millisecond.  And packets are arriving here at lambda is equal to 4 per millisecond. Poisson time on this link of each packet is exactly 0.2 milliseconds so that is nothing but the service time tau is equal to 0.2. What is the probability that exactly one packet will arrive at the link during the transmission of one packet. So the question here is less about the queuing system we are not going to talk about the response time or anything here. If we just look at a timeline packets are arriving basically as packets arrive if they make queue or at some point of time there suppose this packet arrives to an idle link then its transmission will start and it takes exactly 0.2 seconds. So this is actually an MD1 queue let us assume infinite buffer that is not given but let us assume infinite buffer. So that is what this is and the question is that while the transmission is going on what is the probability that one more packet will come that exactly one packet will come. So we have to use just the fact that the packet arrival process is Poisson and what that means when you say Poisson with rate lambda is 40 is that it is 4 is that remember if it is Poisson lambda with rate lambda then it is actually Poisson distribution with parameter lambda t where t is the amount of time over which we are counting this number of packets. So just to recall arrivals are Poisson with 4 per millisecond that means what does that mean number of arrivals nt in an interval 0 to t milliseconds is Poisson with parameter 4t. This is just a short way this does not mean anything but what this really means is that number of arrivals nt in 0 to t milliseconds is Poisson with parameter 4t. So here our nt is the t that we are looking at is basically this is the 0 and this is the 0.2 and number 0t is 00.2 that is it that is what the problem is asking right. So probability that exactly one packet arrives during the transmission is probability that n 0.2 is equal to 1. So the random variable that we are looking at is n 0.2 in this definition because we are looking at arrivals in the interval 0 0.2 which is the interval which is of the transmission duration of the packet. So n 0.2 is nothing but Poisson with 4 multiplied by 0.2. So Poisson 0.8 and so some random variable which has this distribution remember for if a random variable is Poisson alpha then the problem that random variable takes the value k is nothing but alpha raise to k e to the minus alpha divided by k factorial. So that is all that we are saying here our alpha is 0.8. So it is going to be and the k that we are trying to calculate for is 1. So we have 0.8 raise to 1 is the alpha to the k e raise to minus 0.8 is this part and 1 factorial and this calculation turns out to be 0.36. Just an example to show Poisson arrivals what that means. Now another example consider a router with two incoming links link 1 and link 2. So again router here is there are two incoming links to the router and what is it saying the inter arrival time in milliseconds of packets at link 1 is exponential lambda 1 actually that means nothing but the this arrival here is going to be Poisson lambda 1 right we should just use that property. So and here the arrival is going to be Poisson lambda 2 and what is the probability that exactly 3 packets arrive at this router in a duration of 10 milliseconds. So what we are looking at here is we are looking at the merge stream right. So considering that something is coming on one link this is link 1 this is link 2 and packets are coming from link 1 at rate lambda 1 with the Poisson nature and at from link 2 with rate lambda 2 with the Poisson nature this is going to be nothing but Poisson lambda 1 plus lambda 2 right. And then that is all then the rest of the maths is just like the previous one what is it asking what is the probability that exactly 3 packets arrive at this router in a duration of 10 milliseconds. So yeah so let us just look at the thing inter arrival time at each link is exponential. So at link 1 it is Poisson lambda 1 at link 2 it is Poisson lambda 2 aggregate arrival stream and t is Poisson with lambda 1 plus lambda 2 and now the t here again is the 10 milliseconds right. So n 10 is what we are interested in. So lambda t so when it is lambda and t the parameter for the Poisson distribution is lambda t here ever lambda is lambda 1 plus lambda 2 our t is 10. So the Poisson parameter is 10 lambda 1 plus lambda 2 so probability exactly 3 packets arrive at the link again we remember e to the minus alpha alpha to the k divided by k factorial here our alpha is 10 lambda 1 plus lambda 2 that is our alpha and we are just plugging that in to get this. So these are just 2 quick examples for the Poisson properties. Now let us look at our main example for today which is of the open queuing network. So suppose this is the entire picture of the open queuing network what are we looking at here? What is this modeling? Imagine that there is a website which supports 2 types of requests request 1 and request 2 which both come to the same web server W but then they split based on what function these requests are for they split to 2 different applications that entire sort of 2 different back ends. There are 2 back ends this is one entire back end made of application server A1 and database server D1 and this is the other back end made of application server A2 and database server D2. This is a very common architecture for example in a typical call center complaints kind of website we could have a complete different system for new orders and a different system for complaints on existing product this could be a thing. So W is a web server A1 A2 are the 2 application servers and D1 D2 are the 2 database servers. What you want to do here we want to you know basically analyze the system to find system throughput utilization of each server system response time we want to know what the bottleneck server is what the bottleneck throughput is all this we want to do for given parameters and what are the parameters for open queuing network remember we need to know the most important parameter is the average number of visits a request makes to each of these servers. Remember that the request flows through the system multiple time before it exits this is the exit here in this queuing network. So it may visit servers multiple times. So the analysis of an open queuing network depends very much on knowing what these average number of visits are for a request before it completes. And of course the service times this is at one visit how much service does the request need at each of the nodes. Now suppose arrivals are poisson with rate lambda. So we have just one place where external arrivals come and that is very natural assumption that requests are all going to land at that front end web server this is the front the main web server. So external arrivals obviously come to this main web server. So this is sort of the symbolic setup what are the values we are going to do this act. So let us assume that the average number of visits to each of these nodes or the servers is given it is 10 for the web server 13.3 for the application server 1, 25 for application server 2, 9.3 for database server 1 and 20 for database server 2. And the service times are as follows 3 milliseconds for web server, 2 milliseconds for application server again 2 milliseconds for application server 2, 3 milliseconds for database server 1 and 2 milliseconds for database server 2. So these are I have kept them examples as really sort of low execution times this is very typical of good fast websites today. Now of course everything is going to depend on how many times a request has to visit each of these. So we will find out of course that even though TA1, TAOA1, TAOA2 and TAOD2 are all the same the service times are the same for application server A1, A2 and database server 2. They may not they load on each of these servers will be totally different based on how many visits each has. So it is actually straightforward compared to let us compare 13.3, 25 and 20 and clearly application server 2 is between these 3 application server 2 is going to be the one that is more loaded and same thing with the web server versus database server 1. They also have the same service time but the visits are different slightly different. So between these 2 we anticipate that the web server will actually be the more loaded. But so let us go ahead and find the bottleneck server and the bottleneck throughput first. So the remember what we need to do to find the bottleneck server is to calculate the service demands. So D1 will be V1 TAO1, D2 will be V2 TAO2 and so on. So D1 for example V1 was 10. So this is going to be 10 multiplied by TAO1, so sorry this is DW let us call this DW and VW TAOW, D A1 and V A1 TAO A1. So VW was 10 and TAOW you can check here is 3 milliseconds. So this will be 30, similarly VA1 is 13.3 and TAO A1 is 2. So here we have 13.3 multiplied by 2 that is 26.6, let us do 1 more and then that is just what is shown here. So VA2 is 25 and TAO A2 is 2. So DA2 is equal to VA2 TAO A2 this is 25 multiplied by 2 this is 50. So similarly D1 and D2 are also calculated and these are the service demands we get you know 30, 26.7 actually because this was 13.33, so 26.7, 50, 28 and 40. This is we get by using the same formula for each of these nodes and you can see that the one with the highest service demand is A2. So the bottleneck server is A2, the bottleneck service demand is 50 milliseconds. So bottleneck throughput is going to be 1000 by 50 if we want to find out in terms of requests per second and that is 20 requests per second. So the overall capacity of this system the maximum it can do in terms of completed requests is 20 requests per second. So this we found out. Now what we can do is for a given arrival rate we can try to do the rest of the analysis. So what do we want to find? System throughput, node throughput and utilization of each server for a given arrival rate. So let us take lambda is equal to 16 requests per second this is less than 20. So this implies this is a stable system. So we can actually do the analysis for all the nodes otherwise it is an unstable system and we do not bother with analyzing an unstable system. So of course the system throughput is for a stable system this is going to be just 16 requests per second. This is an infinite buffer everywhere in open queuing networks we assume infinite buffers. So that system throughput is actually here. This is where the exit is that is going to be 16 requests per second. What is interesting here is just the node throughputs and the node utilizations. So for example what is the throughput of the web server is going to be equal to the arrival rate because we are again assuming infinite buffer systems. So this is going to be VW multiplied by lambda. The number of visits a request makes to each node multiplied by the original arrival rate. So this is basically 10 multiplied by 16. So it is going to be 160 requests per second for the web server. Let us do one more just for an example. So again throughput of A1 is going to be arrival rate at A1 and that is going to be visits to A1 multiplied by lambda and visits to A1 are 13.3 multiplied by 16 that is turns out to be this basically 213.3 requests per second. We can do one more again just A2 maybe or let us do D1 what will be the throughput of D1. So number of visits to D1 is 9.3 multiplied by 16. So that is what this is around 149.3 requests per second. Now with these things we can also find out the utilizations. So what are the utilizations going to be? So let us do one or two here. So in fact it will be interesting to do the utilization for A2. So the lambda A2 is equal to 400 requests per second, tau A2 was 2 milliseconds. So rho A2 will be equal to lambda tau, lambda A2 multiplied by tau A2 divided by 1000 because we should just have the same unit. This will be equal to 400 multiplied by 2 by 1000 and this is 0.8. So this is the utilization of A2. Similarly each of the other utilizations can be calculated. You can do this yourself, the lambda 160 is here. So to get the rho w you have to simply multiply the 160 by the tau for the web server which was 3 and divide by 1000. You can tell actually that this is 1638, this is going to be 0.48. Similarly you can do all these calculations and verify that you get these as the utilizations. It is obvious expected that the utilization of the A2 server which is the bottleneck server is going to be the maximum that is 0.8 and this is more than all the other servers. Not only that actually we could have calculated, we would have known this even by looking at the fact that 16 divided by, so 16 divided by 20 is also equal to 0.8. And 20 requests per second as an overall completion rate is the bottleneck rate actually of application server A2. This is what application server, this is the rate at which application server A2 can actually complete requests, not their visits but finished requests completely and 16 requests per second is what the overall arrival rate was from external, so it all makes sense. So actually one should check, double check these things in different ways and things work out. Now that we have, what did we find out, we found out the bottleneck server, we found out the bottleneck throughput, we got the node throughputs which are also the arrival rates because this is the stable system. So remember for example, this here, the total rate here was lambda w and over here, this is also going to be lambda w, although this is throughput, this is also going to be lambda w. Similarly this here, the complete arrival rate here was lambda a1 and the throughput here was also equal to the arrival rate. This was lambda d1 and what goes out here is also lambda d1. So now let us look at the response time, that is the next thing to calculate. So what do we want to do, we want to find the response time at each node and also of course the entire system response time, we have 16 requests per second coming in here, we know we have 16 requests per second leaving also since it is a stable system. But when they come in here, what are the per visit response times, how much time does this take, how much time does this take and so on and what is the total time. So here remember we will use Jackson's result, all these times of course we have to assume to be service times have to be assumed to be exponential, this has to be arrivals have to be assumed to be Poisson, branching should be memory less, then we can apply Jackson's result and what is Jackson's result, each node behaves like an mm1, in this case 1q. So now recall you can refer to your slides and recall what the response time, average response time of an mm1q is, it is basically for any for the ith q it is going to be tau i divided by 1 minus rho i. So for example Rw is going to be tau i is 3 milliseconds, rho was 0.48, so this is 1 minus 0.48 and this just turns out to be 5.8 milliseconds. We can find out A2 since it is the bottleneck, so R A2 tau is 2, remember the utilization was 0.8, so this will be 1 minus 0.8, this is 2 divided by 0.2, so this is equal to 2 multiplied by 5 that is 10 milliseconds, so that is what is here. So similarly we can find for A1, D1, D2 you can just plug in these values and this is the set of per visit response times you get, system response time remember has to take into account the multiple visits also, so this is actually summation i Vi Ri, so we have all of these things, so actually this is basically 5.8 multiplied by 10 plus 3.5 multiplied by 13.3 plus 10 multiplied by 25 plus 5.4 multiplied by 9.3 plus 5.6 multiplied by 20. So 10, 13.3, 25, 9.3 and 20 were the visits, these were the average number of visits and we are multiplying each of them by the per visit response time and this total turns out to be 516 milliseconds, so you can verify all of this and do not just kind of follow this on video, you feel free to pause it and do the calculations yourself. So this is actually the example for open queuing network that we wanted to cover. In the next lecture we will be looking at a completely different kind of queuing system where the server and the queue and everything is the same but how we model the arrivals is different, so thank you.


Online or in class, which TEFL course should you take? So you want to explore the world and teach English abroad. That's great! Now, the first step towards your adventure is your TEFL certification course. With so many options to choose from, it can be a daunting task. The first thing you will probably ask yourself is, should I take an online or in-class TEFL course? To find out whether it is best to complete your TEFL certification online as a distance learning course or in-class by attending a training center, you must understand the main differences between an online TEFL course and an in-class TEFL course. Teaching Practice The biggest difference between the two course options is the inclusion of observed teaching practice, OTP, in classroom-based courses. ITTT's four-week in-class courses involve many valuable hours spent practicing your teaching skills in a real classroom with genuine English students. This allows you to put into practice all the theoretical content you have learned and to gradually improve your teaching skills. With an online course, this is obviously not possible. Learning by yourself versus in a group Whether taking the TEFL course online or in-class is best for you also depends on your personal learning style. Do you learn better when studying on your own or as part of a group? Learning within a group certainly has its benefits as you will be able to learn from other trainees' mistakes and can draw inspiration from their ideas. The social aspect should also not be forgotten. When taking a four-week in-class course abroad, you will be able to make new friends and explore a new culture with them. An online TEFL course allows you to study in the comfort of your own home at whatever pace that suits you best. You don't need to take any time off and will be able to take the course while working or taking care of other responsibilities. Personal budget available There is also a difference in the cost of an online and in-class course. An in-class TEFL course costs in the region of $1,500 or more with accommodation, travel and entertainment not included. Whilst a good quality 120-hour online TEFL course can be completed for around $250 and $350. Combined TEFL courses Another option is the combined TEFL course. This format blends different aspects of both the online and in-class courses. With the combined course, you first complete all the theoretical components online at any pace you are happy with. Then, you attend the training center for 5 to 10 days. This depends on which training center you choose and complete the course with observed teaching practice sessions. This is also a popular option as it requires less time commitment but still allows you to gain practical teaching experience. Are you ready to teach English abroad? Whether you choose an online or in-class TEFL course, you will generally have equal opportunities on the worldwide EFL market. Apply now for your TEFL or TESOL certification course and start teaching in a matter of months. Speak with an ITTT advisor today to put together your personal plan for teaching English abroad. Send us an email or call us toll free at 1-800-490-0531 to speak with an ITTT advisor today.


Hello, everyone. Hope you are enjoying your first full day at KubeCon North America 2023. My name is Madeline Olson. We're all here today to talk about how to build real-time, highly-performing applications, and how you can do that with Redis. I'm hoping you guys all at least know what Redis is. Does anyone here not know what Redis is? Good. I will not be explaining it at all. None of the basics. We're only here for advanced stuff. Yeah. I'm here to talk about some basic concepts in caching and how you can extend those with Redis and then some of the more advanced patterns we see that I've seen people use. I said my name is Madeline. I'm a principal engineer at AWS and I'm also one of the open-source Redis maintainers. I want to start off this talk by sort of just a little bit of a warning, which is that a lot of people these days kind of view latency as the new outage. A lot of people hear this quote where if someone sees your application being slow, that's the number one reason for people to not come back. That doesn't necessarily mean you should put a cache there, which is what we see a lot of people do. That doesn't always work great. So before anyone tries to suggest putting a cache in an application, you should really make sure the data is cacheable and that you can identify that piece of information with a key. And then you're doing a lot of frequent lookups on that key. You're not constantly updating that data and you need to reinjust it. So that's the first thing. The second thing is make sure that you're actually experiencing the problem on the read path. We see a lot of people trying to figure out how to put caches in the right path and they generally don't work out super well. You can do something, you can like buffer data, but that's not quite caching. We see people start losing data. Don't do that either. The other good reason to start adding caches is when you start hitting scaling limits, you usually want to start rethinking how your architecture work if that's the problem you're having. It's probably not caching. And also tolerate eventual consistency.  So those are sort of like, you know, I'm going to talk more about making sure you're following these in a bit, but let's dive in and just kind of go over the basics and talk about how Redis fits into this picture. So most people, when they use caching, they start with what's called lazy loading and read through. The idea being that you have a query and a backend database and you want to identify that piece of information, you first check to see if it's in cache, like Redis, and if it's not, you go and check it from the backend database and then pull the data back through. So how does this data eventually get invalidated, which is to say how does it no longer become the most up-to-date source of truth? You typically set a TTL on this. So Redis has obviously made support for TTLs, but so do all the other major caching engines. So one thing I want to highlight here is that there's an independence of the read and the write path. This is often important for microservice architectures because they follow command, query, responsibility, segregation, which is you want to have independent writes and reads so that they can scale independently. So if you're just doing lazy loading, everything is on the read path, which is great. So what are some Redis-specific things you can use to make that read path better? So the most common thing we see people do is what's called a refresher head pattern with Redis. The idea being that you can listen to key-space notifications in Redis, which is a PubSub notification mechanism that's best effort, and it will notify you when a key gets deleted. People use this in a way that when the key gets deleted, they'll know the key name, and from that, they'll be able to refresh the data back from the backend database. This helps with tail latency, as you no longer have that first cache miss on the page, and that's lazy loading. The other thing we see people which is kind of starting to become more popular now, which is client-assisted, sorry, server-assisted client-side caching. So traditional client-side caching usually involves keeping sort of track of TTLs on the client, but now we support the ability for Redis to directly invalidate the records that the client has read. So the way it works is the client opts in to client-side caching. Every time it gets a value, Redis will keep track of that, and when that value is no longer up to date, it will send a notification to the client, and the client can kick it out. There's some popular clients like Redis, which does this automatically, but most clients support all the fundamentals to support this already.  So invalidations is the path where we are proactively kicking stuff out of the cache. So this is done in usually one of two ways.  The highlight I want to make here is that now we have to make changes on both the read and the write path. Again, as we talked about, we like to have those separate, so now these two systems might be built by different teams, and now they have to coordinate to make sure the cache is staying coherent. So that's kind of the s. If you can do all that, you're doing caching more or less right. But there's nothing Redis interesting or too interesting in that. So what most people really want to be using with Redis is using all the advanced data structures we had. Everything we talked about so far is just using the string data type. And Redis strings are just binary blobs of data. You can stick compressed blobs in them, JSON blobs, SQL like result set blobs, whatever you want, strings are great for that. But the other big data structures that Redis uses for caching are the hash, which is basically a sub key value pair. People use this to sort of store like sub piece of information. Or they might store like a large block of text as different components, and then you can fetch pieces of them individually. The next data structure is the set, which people use a lot for like fraud detection. You might put bad actors in the set and say, hey, is this user in this or are they not? And most might also do stuff like, hey, is this user a loud listed? You can do a very quick check to see if the user is in the set or not. The next data structure is what we call the sorted set, which is kind of just a fancy way of saying it's an ordered set based on a number. So this allows you to rank the elements in a set. A more practical example is what we typically call a leaderboard, which is when you have a ranking of items, which is we also use this. It's common like the gaming context like, hey, who has the highest score, but much more practically, it's used a lot to say like, hey, what are the top 10 products that are being sold in the store today? And the score would be how many times it's sold. And the member or the key name is the actual product being sold. I'm not going to touch too much into geospatial, but that's kind of like a sorted set. But instead of using a score, it uses what's called the Geo hash, which allows you to find pretty efficient queries on like the nearest end neighbors to an element. What's great about this is REST is also completely open source. So there's also a bunch of open source extensions to REST called modules, which add even more data structures. So what are all these data structures that have in common that make them good for caching? Because REST has other data structures. It also has the list in the stream data types. This is great because these are all what I like to call declarative, they have declarative APIs, which is to say, hey, we're setting the value to be something. This is good because you often need to keep your cache consistent with your back in database. You don't want to have to worry about cases where if you send an API twice, it gives you a different result, right? Because you're usually like committing the transaction and then updating the cache. And you're kind of okay if you don't update the cache, but you're really concerned if you like update it twice to be more concrete. So when you're putting something in a set, you can only put something in a set once. If you try to put the same thing in the set twice, you'll get the same output. This property is called item potency, which is really great for caching. So let's walk through a little bit what these actually might look like in real workloads. So I'm going to talk a lot about this relational table for a little bit, which is just like, hey, we have this idea where someone's ordering products, there's an order ID, there's some product ID that defines what product we're ordering, and some customer is buying that. So when you're trying to think about caching with Redis, you should think a lot about the use cases. Like, how do you want to access this data? So let's say we have an example where we want to see if a user has bought a given item before. So we can use a set for that, right? We can say, hey, is this in the set or not? So we can see we can sort of like reimagine the data from this relational table into a Redis set. We're following all Redis' best practices where you kind of have a common prefects for all the same data, and then we're using the right data type. So we look at this, how would we actually construct this set? Because all of the mechanisms we have so far don't allow us to do this.  Every time we request it, we don't want to pull it through, like do a complex query on the relational table. Maybe we can do something like write through every time the product gets ordered, we put in the cache, but then we have problems if the cache becomes inconsistent, how do we refresh the data back? So I just want to think about that for a second. So let's talk about one other case, which is the benefit we had in that previous example is like all the data was kind of still there. And if we tried to add something multiple times, we'd have this item potency protecting us. So the other big use case I want to talk about is the leaderboard case. So let's say we want to say what are the top items ordered for a given category? And so we have like a couple of items. In this case, this is all a single key, not multiple keys. And we can see how many of each item has been purchased. So we still don't, we sell the same problems as the set case, where if we want to, we can't lazy load this information, if we want to write through it, we don't have the item potency protection. Because if we want to say like increment the item by one, we don't have the protection because if we actually send the command twice, it will get, it will become incoherent with the back end. So sort of just to reiterate, like we do, we have an ability to do an item point add. So in Redis, storage sets can have an item point add with the Z add, which sets a specific sub key, sorry, the specific score of a member to a specific value. So like we would like to be able to do that, but we don't really have a good mechanism for doing that. If there was some way we could sort of keep track of how many of the increments that we were doing, we'd be able to sort of solve this problem because we were able to turn a non-item point operation into an item point operation. So the meta point that I was trying to kind of get at was this sounds a lot like what the database is really doing already. So the database's job is basically to keep track of all the transactions and make sure they get applied in order consistently. So it would be really nice instead of what we're currently doing of like trying to keep the two databases and the cache in sync, we could just listen to what the database was doing and every time it updates a record, it would just go and let the cache know directly and we don't have to worry about it. Because it's already maintaining logs, like basically all major databases use a right of head log to keep track of updates. So thank God for OpenSource, there's already a project that basically does all of this. We don't want to have to think about how to manage the different logs from different databases. So there's an OpenSource project called Debezium that kind of does all of this for us. So Debezium is like blue code. Debezium knows how to listen to all the different databases and it knows how to basically push out notifications about the updates from that database. The most quintessential use case is it's usually pushing these into a Kafka topic, but this slide had Redis on it so I wanted to use that instead. These are a little bit less common but you can use all this stuff. And the great thing about Debezium being OpenSource is it basically supports most major databases including cloud data ones like Fittas. So what does Debezium basically do? It's listening in on the updates and produces update records like this. So the core pieces of information here is that there's a schema so it kind of tells you on every update sort of what schema looks like. You can turn this off but it's important to make sure like the schema is not changing beneath you. And then you get basically a pre-image and a post-image. So in this case this is a create record. So there's no before image. If there was there would be if this was an update there would be a before image. But there's an after image which is this is what the database looks like after the update. And what's really important here is we have transaction IDs. So we know basically where we are in the stream. And we can know if we've already applied we've updated the cache with this information or not. For most databases that ended up being sharded like Fittas we also get great information like shard IDs so that we can actually fan out and use multiple Debezium processes to read a bunch of data. So I've been talking mostly about materialization of data into a cache. But this is also a great tool for doing invalidations as well.  Okay so I would like to spend a few minutes and show you kind of like you know how this all works in practice. So let's hope everything works because I I originally had a online demo but I everyone was telling me that the internet sucks so I am doing this all offline. What do I want to show first? So Debezium pretty straightforward. Everyone can see this right? Yeah cool. So we have a very simple configuration that's saying hey we're using a sync type which is basically what we're dumping data into. We're just using renus we're dumping all in and we have a source configuration which is where we're pulling data out of. In this case it's a mysql database the variance secure password. Most people probably won't use Debezium server they'll use the normal Debezium which is more natively connected directly with Kafka but for this demo I just am going to use Debezium server itself which is like the core piece of Debezium. So I don't have Debezium running right now I just have a mysql database and a reticence since running. So we have this exact same table we started earlier and I have, I should have read this here and there's basically nothing here. There's the cdc location which I'll talk about in a little bit but right now nothing else is going on. So to start off I'm going to apply the change stream file we just had and Debezium is now going to kick up and start running and the other thing I need to do is actually start pulling that data so this is us consuming it doesn't matter what you can you don't need to read all this it's a lot of information but this is the you know we're pulling these streams and doing something with it. So we have that stream we're looking at and now we can see we actually have data so this data was all pulled from the back ends and put into our database I always get the casing wrong like it's command wrong so we can see we can basically do the command what I do is like hey what are the top products that we've ordered but this isn't super interesting let's actually put some load on this so now not only are we materializing we're also generating random data and just kind of filling this up so we're now like throwing random data at this and we can go and validate that this is actually staying in sync let's go grab some random product ID and go and validate that this does actually work oh because this is in red this that doesn't make sense this is where I want to put this so we have four items and we can do this well I promise this works um so that's because you know there's records ongoing I got a little bit unlucky and one other great property about this is if we want I'm going to throw Mara up on here so this is basically everything that's running on reds at the time you can see all these commands we're talking about and where's reds if we go and just delete everything it will go and start refilling everything that happened a little bit faster than I was hoping but I deleted everything and we can show that eventually it all gets repopulated because it was able to go back to the being stream and we resume everything so there's a lot of glue code in this file but there's really not that much actual code that we need to write so in this case we talked a little bit how we're generating these cdc events and all we're doing is going in parsing these messages that were generated we're checking to see the operation that it was in this case we talked about c being the create event my SQL specifically also has an r event which is a read event which is from a snapshot and so this is hey when we're loading it back from a snapshot this is because the way divising works is it goes and takes a full snapshot of the data set and then starts listening to ongoing changes so you can turn this on on a running database or you know set it up before you start the database and it will work the same this also means that if you somehow get a corruption inside your database and like your cache becomes incoherent you're able to basically restart to be easy on it it'll take a new snapshot and catch all the way back up and so here's like kind of all the important code it's a little bit smaller which is that hey when we got a new record for the first time we'll call asset on it which is set add and we'll put it in and if we have duplicate records they'll be kind of handled gracefully and then the zincrify case is when we're incrementing the sorted set score by one I mentioned a little bit about transaction IDs so you can also do that with Lewis scripts you can basically every time you update it you can pass in hey this is the transaction ID I expect you to see is it the one you have if it is update the transaction ID cool so back to the slides okay so I could it's worth saying now that this is sort of like a generic mechanism you can use like you don't have to be consuming from the database stream you could also put this as a as a right ahead before the database as well which is a common pattern to sort of like allow you to batch writes into your back end database while still making sure that the data has been durably stored but the benefit of this is you do have those decoupled reads and writes and so the applications can more or less iterate independently and you have a great way to scale the back end because then all you really need to work in worry about is how do you scale debesium so that it's pulling data uniformly across a bunch of database instances I know the common use case we've been seeing a lot as a lot of people are starting to invest more in data analytics because gen AI I hear it's a thing needs lots of data so people are using that to sort of push all of their data out of their database into analyque warehouses other places so that they can do machine learning so the other great thing about doing this strategy with Redis is that it works well with how Redis does high availability so there's kind of two main ways to do high availability with caching the first is you do multi writer so when you have a right you say of like three backend nodes for caching you write to all three and you basically respond back when like two have written successfully this means that there's often very subtle incoherencies between individual nodes and the cache whereas Redis takes a different approach whereas you only write to the primary and the primary directly replicates verbatim what it has to the replica this means that that's the cdc location that I kind of briefly talked about earlier you're able to store where the cache is in the cdc stream that's being produced by debisium so that when a replica when the primary fails and replica takes over it knows where it is in the stream and can resume from that point on cool so this is in the panacea as I said at the beginning there's always trade-offs to everything we're building the main downsides even though debisium has really matured as a open source project in the last couple of years there's still a lot of assembly required to kind of hook everything up and then make sure everything's working as expected as sort of glossed over some details with vitas we have to have handle like shard movements we have to handle transactions if you send multiple stuff sorry multiple different updates together in a transaction you sort of handle those as a block so there's a lot of little stuff you can still kind of get wrong and still requires quite a bit of you know tribal knowledge to be getting right but if you kind of build up that expertise you can sort of apply it generically across a bunch of different applications the other downside is if you still have a very right heavy application you're going to generate a lot of unnecessary data and do a lot of cache updates for no reason the other big issue we've often seen is you know you don't you usually have a very small set of data which is your working set in caching see if you have like 200 gigabytes maybe someone's only operating on 10 gigabytes there's no real good way to like shrink this data set down and only care about what's hot because everything is based on the previous updates it's hard to know you know what's the hot 10 percent of data without really understood like having deep understanding of your data and sort of proactively working on it another downside we hear a lot is people often say like oh it would be really nice if I could replicate a view of my database which is say hey like I want to create a virtual view and replicate that but to be the only word operates on real updates so there's no good way to do that without also materializing like another read replica somewhere which there's ways to do that it's just not fully fleshed out at the moment the other main downside we've seen is that when you do have data failures and you need to like restart the stream you can't lazy load stuff in so you kind of tend to take a major outage while restoring data so that's sort of the end of the advanced use case section and now I want to talk a little bit about the best practices that I've seen people employ as as I've worked with folks that are using Redis specifically in cloud native environments so we see a lot of people running managed Redis I am from AWS I do work on the managed Redis service but Redis still works pretty well in Kubernetes deployments and it's fairly cloud native the best way to run Redis in like a Kubernetes cluster is with cluster mode a big gap we used to hear a lot was with the dynamic IPs of pods cluster mode would get kind of confused and IPs would be assigned to multiple nodes but that's mostly been fixed with Redis 7 so if that deterged you in the past it's working a lot better now and we are still and we being the community working to try to make Redis cluster better with this new initiative we're calling cluster v2 which should make it a lot easier to scale in and out adding new shards removing shards etc so the next thing I want to talk about is sort of monitoring so you know as this theme of hey make sure you're doing caching right it's very important to monitor caches behavior because if you start having problems they tend to escalate very quickly it doesn't Redis does not have built-in support for integration with telemetry or metrics but it does there's a lot other open source projects that allow you to kind of bridge that grab the main one I recommend is using Redis Explorer for Prometheus you can configure the Explorer to provide the data from Redis info in a format that Prometheus likes and you can adjust it all this is a Grafano dashboard that I was showing last year to several folks at KubeCon I assume everyone here is fairly well versed in how to measure cache performance but the big thing you want to be watching for is cache hit rate which is easy to do and usage the next thing I want to talk a little about is a lot of people ask me why can't they measure latency here so Redis recently adds support to measure like what's the end-end latency time within a given command with like B50 P99 and I want to talk a little bit about that so this is a graph of what Redis is response latency looks like from the client side at different throughputs you really can't quite see at the bottom but the bottom is a scale of basically zero requests per second to 160,000ish requests per second and the vertical axis is the latency time you can kind of see that the latency stays pretty flat so the bottom line is the P15 average the maroonish color and stays pretty flat until it gets to about 160 requests per second and then sort of vertically shoots up it doesn't stop at that line it just we can't measure it anymore because we're like the latency jumps to infinity and this is because latency in high performance systems grows to the square of the number of commands that you get queued up so Redis tends to start seeing latency increases around 95% of max throughput and then scales basically with a square as you approach that the 100% limit so you really have no room to scale for latency spikes which is just to say you really need to understand the limits of your system because if you're waiting for latency to spike you're kind of already too late to respond to the crisis and this is because Redis is what's caching and distributed caching in general including Redis are what are called metastable systems there's a bunch of good writing on this Mark Brooker who's also an engineer at AWS has written well about this which is this idea that caches tend to be stable until they aren't so as your this graph just shows like kind of a high level of good point is the number of successful cache hits but once you kind of exceed and offered load which is the number of requests you're sending the system the number of successful request drops off and once it gets to this dropped off state it often can't get back to the good state once you start seeing errors in your cache you'll often start doing retrives or you'll start getting a cold cache I haven't talked much about AWS this talk but one thing AWS does really well is post mortems of issues a couple years ago there was a major kinesis event and this was purely because of cold caches right so kinesis was expecting like when it got a new piece of information it would put it to the cache and then put it in a queue and then once it got to the end of the queue it would go back and check the cache but if the cache became cold you would put something in the cache put something in the queue it would get processed a while later and when it got processed the cache would be cold and you would not be able to process it quickly and so kinesis just kind of kept getting further and further behind which is all a very long for both way of me saying you should really be testing your failure modes of your caches there's a couple of recommendations we normally give to our customers at AWS as well as open source users make sure you're testing individual node failures this is very easy in Kubernetes just kill pods randomly make sure everything's still good and stable you should also be testing high load scenarios what a lot of people are doing is just testing like failures but you know that case where we have high latency is also a big problem there's an opensource project or an opensource module the plugin for red is called reds fault injection which allows you to artificially increase latency the other big thing that I would strongly recommend is try to avoid multi node dependencies because they can exasperate failures so we've seen a lot of this with like feast and other types of feature storage which people use they have an offline primary store and then an online cache of features and the way it works is they sort of fan out and request a lot of data at once but the latency of that request becomes the tail so the slowest node in the cluster becomes the latency of the entire request so although sometimes it's unavoidable it can cause high latency and then lastly you should be doing like you should be periodically doing what I did in the demo which is just flushing all the data and making sure everything comes back up you might want not want to do this on a prod cluster if anything I would tell you not to do on a prod cluster but you should be testing it and you should understand what happens so that when something does happen you're prepared for it so that's everything I had today I'm so happy I'm almost perfectly on time you can follow me on Twitter if you want or what's formerly known as Twitter all the code was posted here if you can please take some time to scan the QR code and give feedback it's really important for the organizers here to really understand like what you guys want if like this was completely wrong do the feedback tell them that it's all wrong or if you want something else if you want more gen AI talks scan the code so I've been told if you have questions well you can do that now for a little bit if you have a question you should go up and ask it in the microphone or if you want to go to the bar crawl you can go do that too hey thanks for the sharing I do have two questions so first on Kubernetes regarding performance do you recommend putting your the computation pod at the same node as the reddit pod? so I typically recommend not to do that because you can sort of give the situation where like if they don't if you end up scaling them independently you'll have inconsistent cache performance and you know a lot of stuff works small at scale if you like co-locate them and once like they they sort of split you start seeing weird performance patterns so I normally say by default don't like keep them away from each other so that you can make sure it still works as expected for that like non-uniform access but there's plenty of people who definitely do side pods of reddit so they scale them together and if you're going to do that that's fine like just make sure you don't run the situations we have that mismatch okay thanks hi thanks for the talk I'm an SRE who has recently inherited a whole bunch of huge redis nodes and we're working through a lot of tech debt to get up to date working on getting to redis 6 excited for redis 7 thank you for the work you've done on that my question is one of the things that we have found with our choreographies is one of the one of the hardest things to deal with from coming from kind of the kubernetes world we have a control plane right will some of the things that that are coming up with cluster v2 help with the fact that redis is a little different you know redis is a cluster of peers yeah so I didn't I didn't want to spend too much time talking about that but that that is sort of the idea is we really want to give a control plane into redis clusters so you can instead of saying like so normally you have to basically add a peer like you know resharred the data over set it slots and we really want to get to the point where you can say like hey I want seven shards with like even like slot distribution and like there will be some operations that it will itself just be able to scale out it will add the shards over it will happen automatically and you don't have to go manually do all of that so that is a stated goal I didn't link it but if you if you reach out I can like share the issue with you if you want to add your input into that because like this is kind of what information we want if there's anything specifically painful you're seeing but yeah we are hoping to solve those types of problems absolutely yeah thank you so much cool well if no one else has any questions I'll be up here I'll chill out there's not I think that there might be beer in the main hall but I'll be here for a little bit anyways cool and thank you all for coming


Thing that I like most about being a creator is the fact that it's so easy to make someone's day and change their opinion about something So if I want to make them feel better about themselves, I could pretty easily do that, which is great I think the best part is being kind of in a sense like the pioneers like the people who started not us But all youtubers in this age We kind of started this this whole big movement being connected to all types of people all over the world that have similar Interests which is the reason that I started being able to create whatever we want to do. Yeah It's the most fun to be creative and just be original. We do have the coolest job in the world I mean Forbes did ask a bunch of kids what do you want to be when you're older and like 80% of them We're like youtubers. So we're here. We're doing it my least favorite thing about being a creator is how much The public thinks I owe them about my personal life Maybe just sometimes the pressure the craziness of it the make sure you're doing it all the time consistently because if you don't It's not gonna work I feel like I always have to be like I am in my videos if that makes sense even when people meet me in person and It's just impossible the pressure. There's a lot of pressure when Thousands of eyes are on you you're every move Sometimes you just can't prioritize your friends because you're busy and you have to like sacrifice Like spin stay home and like not going out to that party because the next day you have to wake up super early to be On set for something and just kind of it stinks like you feel left out a lot. I feel left out a lot I don't know about you my media. It's a new world. It's a new thing. We're all figuring you know, we're all figuring out We don't know what's going on. We still don't know what's going on


We are joined today by Mateus Falcone from the Brazilian Center for Health Studies and the People's Health Movement in Brazil. He's going to discuss with us the current situation in Brazil, what policies has the government taken that has brought it to this current moment in the pandemic where it continues to be the hotspot after months of tragic news of continual deaths and a growing infection right there. So thank you so much for joining us, Mateus. Thank you Zoe, it's nice to be here. Great, and so first question is that, you know, in the past couple of days, Brazil has overcome the very worrisome milestone of over 100,000 deaths from COVID and over 3 million confirmed cases. So what is the current situation looking like? Has Brazil reached the peak yet? What are infection rates looking like? If you can give us a general kind of scope of what's happening across the country. Yeah, so indeed it's a very hard situation. Brazil is a big country with more than 200 million people. So it would look like a country that would have a lot of cases. But actually it's one of the countries that has more cases per person as well. And it's basically do bad pandemic handling by the central government. There's no evidence for now that we have reached the peak or that we are close to flatten the curve. It's very important to keep in mind that Brazil is a very big country and it has a lot of difference between regions which include healthcare infrastructure, social inequalities, a bunch of inequities. So now we will see some regions in Brazil, especially the big cities where the pandemic has started here, like Sao Paulo for instance, the city where the pandemic indeed start that are close to reach like perhaps the peak or even to flatten the curve. But what we see now is that the pandemic in Brazil is moving towards the countryside part. So we see increasing of case in medium cities and small cities, which is dangerous as well because sometimes the city doesn't have a good healthcare infrastructure like the capital of the big cities. And this would be the movement now. It's important to notice as well that each state or municipality in Brazil has such an autonomy. We'll talk about this later I guess but an autonomy to create its own policies in terms of pandemic handling. So we see this difference as well across the territory. Yeah, and so you mentioned that a lot of these kind of alarming numbers and the higher cases per resident also has to do with the failed policies of the central government. And a lot of cases, you know, not only failed policies but actually resistance to taking any policies. So can you discuss some of the public health mishap that has been undertaken by the central government? And then maybe also on a state level what has been done, what hasn't been done? Yeah, sure. So first of all, it's important to understand how the Brazilian health system works. We do have a big healthcare and public health system. Public, yeah, I mean for public health measures and for healthcare that is called the unified health system, Sistema Unico de Saúde in Portuguese. It's similar in some ways of the NHS in the United Kingdom. So it's a public healthcare system and it's also, it should also take the public health measures. It's organized in three levels. So municipalities that is the local level, the cities, state level and federal level, right? So each of them should work coordinatedly, even in financial measures but also in health actions including public health actions. It's important to understand. So the federal government within this system should take a role of coordination, of information, of proposing the framework for adopting the measures at state and local level. This would be the expected role besides financing healthcare and public health measures. This would be the basically two roles expected by the federal government. What we have seen since the beginning of the pandemic in Brazil is a position, a point taken by the federal government, especially by our president of complete denial of the pandemic. So we are dealing with a very hard and dangerous situation and the central government is basically denying how dangerous it is. So we had one minister that was developing the one health ministry at federal level that was developing the first public policy, public health measures and it was fired by the president. Then we had a second minister that was in charge for, I guess, one month and it was fired again. And now we have, how can I say this? It's not exactly an official minister, it's like a minister that is waiting for the nomination of the next one, but it has taken more than 30 days, more than one month, basically two months. So we are just expecting the nomination of the next health minister that have happens. So here we can see by this position of denial a very bad pandemic handling at central government. The central government has also replied, has also answering the pandemic by offering to people one solution. The solution would be some medicines with unproven effect to handling pandemic. I'm talking especially about chloroquine and hydroxychloroquine that was also a medicine supported by the US, United States central government, right? So the central government were basically supporting that this medicine would be the cure for COVID-19, which we know it's not. So basically this was the only main action, the only main plan taken by the central government which has revealed itself inefficient for having any better results in pandemic handling. There are some phrases, very iconic phrases from our president that express this point of denial of the pandemic. Like when we reach a certain levels of death, he just stated, so why? I don't work in centuries, very weird sentence, very weird statements that he just, that just proves this position of denial of this hard situation. So this would be a general framework. On the other hand, we have some public health measures that were adopted by state level governments. So the main discussion in Brazil is, should we take social isolation measures like quarantine or not, central government basically? No, we shouldn't have, we shouldn't adopt this measures because this will harm economy. But what scientists and specialists and some politicians, the opposition says is, yeah, we should take these measures and we should provide economic relief, economic help for people in general in order to avoid this economic harm. So some state level governments and some municipalities as well, they have adopted social isolation measures in order to tackle the pandemic developing in Brazil. Our Supreme Court has decided, and this was very important, that this public health measures should be taken by state level, which does not mean that the central government shouldn't also take these public health measures. They also have a very important duty and a very important role in financing health care, public health care, and in taking the coordination within this framework of public health measures. One last point, the central government should provide more financial resources for health care. We have recent studies showing that not even half of the resources reserved for transferring in order to tackle COVID-19 pandemic were indeed transferred to state level and to municipalities. So this is also a very important problems that could also result in the future, we hope in even juridical court responsibility of the central government. Yeah, I think that's a really challenging and complicated situation, especially given as you comrades have written about before, is that the neoliberal policies of this government and the entering government of Michel Temer have really worked to dismantle this very important unified health system in Brazil, which is the safety net for the majority of Brazil's population, as many people do not have access to private health insurance. So can you talk about how years of neoliberalism has set up Brazil, not only to do poorly with the introduction of a fascist government, which outrightly doesn't take the necessary policies, but also it's already in a bad situation to be able to respond. Yeah, yeah, sure. So we have this unified health system that was a system adopted in our constitution in 1988, sorry, after a big social movement struggling for right to health. So Brazil has acknowledged, recognized right to health in our constitution in 1988. And since then we are trying to develop this great and beautiful public healthcare and public health system in order to realize, to fulfill this idea of right to health. But on the other hand, we also have this public insurance system that works similarly to what we would find in the United States of America, for instance. And what we see by comparing this two system is that the public system is much more cheap and much more effective. So 75% of the Brazilian population can only rely on healthcare on the public system and not on the private because they don't have private health insurance, right? Besides that, the private health insurance companies do not provide all the medicines, the essential medicines, and some very complex procedures, just like transplants are mostly, deed are mostly done here in Brazil by the public system. I'm talking about 90, 80% of the transplants in Brazil being doing within the public healthcare system and not in private healthcare system. So we see that, and besides that, the public system, unified health system suits also works on production of medicines. We have public production of medicine in Brazil and even in the developing of the COVID-19 vaccine. So, and also in formation of health professions. So it's a very wide public health system and about 75% of our population relies only on this public healthcare. But on the other hand, the private healthcare system, not system, I mean, private healthcare in general in Brazil costs about half of our public spending in health. And the other half goes to our public system. So what we see, what you can conclude by looking into this numbers is that the public system is more cheap and more efficient, more effective while the public healthcare and the unregulated private healthcare are much more expensive. So this would be a good comparison. And what we had recently is that the central government, and this is not from this current government, it has happened in the last decades, are not complying as we think it should comply with financing duties with the public system. It has worsened in Michel Temer government with the adoption of constitutional amendments, the constitutional amendment number 95 that established a cap for public spending. And this has worsened public spending on public system, public health system. So this would be something that we are struggling now for a review. And we do think that within this pandemic context, the public system has been strengthened within the public scores, the public speech, as we have noticed that only a public system can handle the pandemic well. Yeah, no, I think that's a really important reflection that we're seeing across the world that the privatized healthcare system is incapable of responding to the masses and that its incapacity also has propagated the further spread of the virus. Of course, we see the case of the United States as a very extreme example of this. But I think that's all we have time for at this moment. It's a very important case to continue watching and concerning that the virus continues to spread and we're hoping that the people's maintaining disciplines and being able to take the measures that they can, hopefully, in some way counteract the mismanagement on a national level. But yeah, thank you so much for joining us. And yeah, I thank you for the opportunity and I also hope that we can overcome this very hard situation and strengthening this sense of solidarity that shapes our public health system and the struggling for right to health. Thank you very much. Thank you so much. Now we have time for thank you for our team people's dispatch.