So, last class we have considered that solve to solve a LP problem using in tabular form. We have considered an example and that example we could not complete at that day. So, let us see from the tabular table 2 and table 2 70 we have considered in pivot element again. How pivot element is selected? First we will see the cost function coefficient in the cost function coefficient which is the most negative coefficient that will be treated as pivot column. So, pivot column is selected in other words x 2 is the our non-basic variable which will enter as a basic variable that is why the x 2 is called entering basic variables and how the pivot row is selected. So, once pivot column is selected find out the ratio of v divided by x 2 with positive sign of x 2 coefficient. So, in this situation this 51 by 51.6 divided by 7.332 ratio which is got 10.4 and another is your minus this minus sign will not help us to select the pivot element if you select the pivot element minus of the p 8.33 divided by minus 3. This will not help us to what is called reduce the function value if you consider x 1 is the living basic variable it will not have. So, minus sign will be not will not be considered in order to select the pivot element sorry pivot row. So, this is the only that this is the pivot row we got it. Once you got the pivot out of this two ratio minimum ratio is that that one 6.33 and that will be treated as a your pivot row. So, pivot row and pivot column will decide the pivot element. So, 70 is the pivot element. So, that that equation 3 is to be divided by 70 in order to make the coefficient of x 2 equal to 1. So, other coefficients equation number 1 and equation number 2 this coefficient must be 0 coefficient x 2 associated with x 2 and x 2 in equation number 1 and 2 must be 0 and similarly in cost function the coefficient associated with x 2 must be 0. This things we can do it by elementary row operations. Once you normalize this one by 70 we will get it this equation eliminate x 2 coefficient in order to eliminate the x 2 coefficient from equation number 1 2 and 4 that I have to multiplied by equation number 3 with coefficient 7.332 and subtract it from equation number 1. So, I am written 1 minus 3 multiplied by 7.332 if you subtract that will come 0 0 1 minus 0.28 and minus 0 147 and this last class we have written 20.9 point this is mistake we have to write 4.546. Similarly, this second equation x 2 we can remove it by multiplying the equation 3 equation 3 multiplying by this equation you have to after normalizing this equation you have to multiplied by 0.337 and added equation number 2. So, 2 plus 3 again then 0.337 this added if you add it you will get it this equation last class we have written 10 to the power minus actually it will be 10 to the power minus 3. So, similarly x 4 equation cost function equation the x 2 we can eliminate by multiplying the equation this equation by 1 2 3 and add with equation number 4 this equation number 4. When you are talking equation number 3 correspond to this equation. So, this we are doing so after doing this one look at the last row of the cost function look last row of the cost function this cost function all coefficients are positive. That means, further we cannot reduce the cost function value by changing one of the basic variable as a non basic variable and one of the basic non basic variable as a basic variable. So, we will stop our iteration of here and directly you can see what is the cost what is the function value basic variable function value. So, x 1 into 0 plus x 2 into 0 plus x 3 into 1 x 3 plus x 4 into this quantity, but x 4 is a non basic variable this value is 0 the x 5 into this since x 5 is a non basic variable this is 0 x 5 value is 0. So, x 1 directly we will get it 4.56. Similarly, x 1 we are getting directly is 10.47 then x 2 non basic variable value x 2 is directly 4.62 and what is the cost function value x 1 multiplied by 0 plus x 2 multiplied by 0 plus x 3 multiplied by 0 0 x 4 is a non basic variable this value is 0 0 multiplied by this non 0 quantity 0 this multiplied by 0 this equal to this quantity. So, this quantity is equal to 0 means f is equal to this one. So, our objective function value minimum value of the objective function is that one if you see this one and what we are supposed to find out you see our problem was maximize our problem if you see the maximize f of x that minimize value of x we got it. So, maximize values of that one will be f of x will be that is not here last page this one the maximum value of f will be what is this f max value will be minus of minus 210. So, it will be 2140.644 that is our maximum value of that one will get it and what is this our x 1 x 2 value x 1 is 10.4 x 2 is 6.48 these are two values are their design variables x 1 and x 2. So, these values are the design variables values are that one this is the design variables this and this agree and you see this is actually this will be z not f this is z. So, z is equal to this one and that f of x maximum value is that quantity. So, this is the way we will solve the LP problem using tabular form. Now, let us see what is two phase method the solving LP linear programming problem using two phase method a two phase two phase simplex method for solution of LP problem. So, let us see what is this our problem is maximize z is equal to y 1 plus twice y 2 subject to 3 y 1 plus 2 y 2 is less than equal to 12 and then 2 y 1 plus 3 y 2 is greater than equal to 6. Now, you see one inequality is less than equal to thing another equality is greater than equal to 6. So, this type of inequality when it is there the greater than equal to some constant quantity. Then we have to solve this problem by two phase simplex method what is this and it is also mentioned that y 1 is greater than equal to 0 and y 2 is unrestricted in sign that means is value can be negative positive anything 0 also. So, now this because when we will solve this problem using the standard LP method by simplex method you have to convert into standard LP problem. Then how will you solve because y must be greater than equal to 0. So, y we can redefine define y 2 as a y 3 minus y 4 and y 3 is greater than equal to 0 y 4 is also greater than equal to 0. Now, if you replace y 3 by 2 new variable y 3 y 2 by 2 new variable y 3 minus y 4 and both are greater than equal to 0. So, this quantity depending upon the value of y 4 or y 3 this will be y 2 may be positive negative and 0. So, this problem we can redefine into a what is called new variable form. If you define x 1 y 1 is equal to x 1 x 1 I have defined by y 1 then x 2 I defined y 3 and x 4 sorry x 3 x 2 I have defined by y 4. So, our original problem the original problem given this one we can rewrite into this form maximize z y 1 plus y 2 y 1 plus 2 y 2 y 1 value is what x 1 plus twice y 2 value is what if you say y 2 value you have y 3 minus y 4 y 3 value you have considered x 2 and y 4 consider x 3. That is we have defined here agree. So, this is our objective problem in terms of new variable x 1 x 2 x 3 subject to f of x that is maximize subject to what is this 3 y 1 3 y 1 value I will write x 1 2 y 2 means x 2 minus x 3 is less than 0. So, I will write 3 x 1 plus 2 x 2 minus x 3 is less than equal to 12. Then twice the second equation inequality equation twice x 1 plus 3 x 2 minus x 3 is greater than equal to 0 2 x 1 plus 3 x 2 minus x 3 is greater than equal to 6. Now, we are writing x 1 is greater than equal to 0 for I is equal to 1 2 3. So, what is our now problem is there you convert into a then our solution starts from here convert into standard LP problem. And standard LP problem you know this is minimize f of x what is f of x minus z what is this one minus x 1 minus 2 x 2 minus x 3. And we have to convert all inequality conditions in a equality conditions with right hand side is a positive constant quantity. So, let us say this one this one will write 3 x 1 plus 2 x 2 minus x 3 and this is less than 12. That means something we have to add with this one let us call the new variable x 4 is equal to 12. And right hand side you see positive quantity is that we have to make it right hand side that equality condition equality equation positive quantity it is already positive. So, x 4 is thus our slack variables the way we do it we do the what is called standard LP problem by adding slack variables. And that slack variables value greater than equal to 0. And second equation you see second equation 2 x 1 plus 3 x 2 minus x 3 and that is greater than equal to something we have to subtract some variable x 5. Suppose if you make it x 5 is equal to that 6 then you will see when you solve this equation x 1 x 3 this when it is 0 x 1 x 2 is 0 that values are coming minus. So, that creates a problem while you will solving the LP problem. So, in addition to this one I am adding with another new variables that is called artificial variables this is called artificial variable. This is called artificial variable and that artificial variable value is greater than equal to 0. And this is also it is called surplus variable this variable x 5 with minus sign it is called surplus variable. So, this is called surplus. So, when this type of inequality is there we have a two variables we have to introduce one is surplus variable another is artificial variable. If you just introduce surplus variable you see that this x 5 value will after solving you may get it negative quantity and this is not our constant is all are greater than equal to 0. So, this will violate our solution. So, in order to avoid that one we use another artificial variable that is called the what is called x 6. So, now it is converted into our standard LP problems once it is converted into standard LP problem we can solve is either in matrix form or we can solve by using tabular form. Let us see that how it is solved by this is solved by using the what is called tabular form. So, two phase method two phase simplex method you can write is an approach two phase simplex method is an approach to handle the artificial variable to handle the artificial variable when they are added to the system equations. So, two phase simplex method is an approach to handle the artificial variable or t whenever they are. Now, first phase that is called two phase first phase we will eliminate artificial variable from the problem. That means how the artificial variable is going to be formed. So, the all artificial variable all are artificial variable is considered as an artificial function artificial cost function. Suppose you have more than one artificial variables are there you have to add all are artificial variable together and considered as a artificial objective function or cost function and that cost function you have to minimize. In other words that cost function value artificial cost function value must be 0 some of the all artificial variables must be 0. So, one phase you have to eliminate w from the mathematical expressions. So, let us see how one can do this one phase one removal of artificial variable. So, this is here let us define artificial variable. So, this is agree so insult a artificial variable. So, how to remove this one. Suppose if you have a equation of this type of equation more than one let us go to the how many artificial variable will be there two artificial variable in each equation one are Maori fish is there, and two equation two are two artificial variables. two artificial variable you add together and treat as a objective function in addition to the original objective function. So, we have to do simultaneously minimize we have to minimize two objective function first you minimize the artificial objective function once we have minimize this one then you start to minimize in phase two you minimize the what is called objective function of the original problems. So, that is our steps to be followed. So, let us see in this example what is our artificial function where artificial variable x 6. So, that x 6 the minimize w and w I have considered x 6 and what is this x 6 expression see from this one x 6 is equal to I can write 6 minus 2 x minus 3 into x minus 2 x plus x 5. So, our 6 minus 2 x minus 3 x 2 plus 3 x 3 if you bracket you open the bracket then plus x 5 is our artificial objective function this is the artificial objective function minimize this one subject to what subject to you see this two constraint equality constraints. So, this two equality constraint 3 x 1 3 x 1 3 x 1 plus 2 x 2 minus 3 x 3 plus x 4 3 x 1 plus 2 x 2 minus 2 x 3 plus x 4 is equal to 12. Then second equation you see this equation 2 x 1 plus 3 x 2 minus 3 x 3 2 x 1 plus 3 x 2 minus 3 x 3 minus x 5 plus x 6 is equal to 6. So, our problem is minimize this one first phase minimize this one subject to this one. So, if you write it this one in tabular form this will look like this way. So, table one basic variables variables is the basic variables in these directions then how many variables are there if you see in this equation how many variables x 1 x 2 dot x 6. So, 6 variables are there. So, you write it x 1 x 2 x 3 dot x 4 x 5 x 6 then b then ratio. So, I will write first this equality constraints 3 into x 1. So, it will come 3 next is your see this one next is your 2 into x 2 minus 2 into x 3 plus x 1. So, under 2 under x 2 2 will be there under x 3 column minus 2 is there under x 4 column 1 is there x 5 x 6 no coefficients associated with x 5 x 6 is 0. So, I can write it that 1 2 minus 2 1 0 0 that right hand side is equal to 12. So, I will write this is equal to 12 similarly the second equation under x 1 2 I will write under x 2 3 under x 3 minus 3 under x 4 minus 1 x 5 minus 1 no x 4 is there under x 4 will be 0 under x 6 coefficient is 1 1. So, I can write it 2 3 minus 3 0 minus 1 1 6. So, we have a 2 objective function we have to give in phase 1 this is the phase 1 you can say this is the phase 1. Phase 1 job is what it will optimize the optimize means in this way minimize the function value W means artificial objective function value you have to minimize. In other words you have to make it 0 this one by minimizing this optimization problems LP problem linear optimization problem. So, our first is cost function or normal original cost function next is our artificial artificial cost function. So, let us say our original cost function is what if you see the our original cost function that minimize f of x that minus x 1 minus x 2 bracket if you open plus x 3. So, under x 1 is minus 1 the original cost function under x 2 is minus 2 under x 3 is 0 2 and then there is no x 3 x 4 is there if you see x 4 x 5 x 6 is not there. So, these all are 0 0 0 and what is this you right hand side of this one this value is this value is f of x. So, you will write simply that f of x this dot what is the function value of this one. Next is artificial variable you see artificial variable objective function what we have written it artificial objective function value expression just now I mentioned yes W is a 2 x 1 minus 3 x 2 plus 3 x 3 plus x 5. Since W is constant quantity you can make it with the W minus W minus 6 is equal to minus 2 x 1 minus 3 x 2 plus 3 x 3 plus x 5. So, if I write it this one accordingly I will write under x 2 is minus 2 x 1 then minus 3 this is you see this one if you take this one is a minus 3 x 3. So, minus 3 then plus 3 then x there is no coefficient with here there is no coefficient x 4 x 5 is 1 coefficient. So, x 5 1 coefficient x 6 there is no coefficient then what is the function value because it is 6 is constant we can take it left inside W minus 6 is the objective function value agree. So, minus 2 minus 3 0 1 0. So, now start your table of process of this one now you see first you have to identify which one is the basic variables. Now, if you consider x 4 x 4 is exist in first equation also x 1 variable belongs in equation number 1 it is does not belongs in equation number 2 agree, but x 5 you see that x 5 does not contain in equation number 1, but it is a with minus sign. So, you know to make minus plus then this will be minus sign. So, this we cannot take in as a basic variable, but x 6 contains only equation number 2 with positive and it does not contain in equation number 1. So, our basic variables are basic variables are x 4 and x 6 is a basic variable which is our remaining things are our non basic variables. Because we have a 2 equations are there 2 basic variable and we have a 6 variables are there 6 minus 4 6 minus 2 is a 4 non basic variable. So, our non basic variable generally denote with an arrow x 1 x 2 x 3 and x 5 is a non basic variables. Now, you see what is the basic variables value immediately because non basic variable value is 0. So, if you see this equation number 1 immediately we get x 4 is equal to 12 agree and x 6 is equal to 6 and remaining x 1 is equal to x 2 is equal to x 3 is equal to x 5 is equal to 0 agree. Now, this are the basic variables value values and this is the non basic variables agree. Now, which non basic variable will act as a basic variables. That you have to find out by choosing the pivot column and pivot row. Now, since I have to in phase 1 we have to optimize the artificial objective function or cost function. So, you have to concentrate only with the based on this coefficient reduction reduced coefficient objective coefficient of the artificial cost functions. Now, see this coefficient is minus this coefficient also minus we have to consider the most negative coefficient and most negative negative coefficient is that one agree this one. So, this is our pivot column because we have to minimize first w then we have to minimize that our cost function. So, we have to concentrate only this last row which is artificial cost function. So, this is the pivot column that means x 2 entering as a basic variables entering basic variable is which one x 2 and which one is non basic variable will enter as a non basic variables. So, again you have to see this ratio that we have to show 12 by 2 is equal to 12 by 2 is equal to your and 6 by 3 is equal to 12 by 2 is equal to 6. Which one is your what is called minimum ratio this one is your minimum ratio. So, then what will do it this is the minimum ratio. So, then what will do it this is the pivot row if you see the pivot row of this one that means this is our pivot element this is our pivot element. So, what will do you normalize this one you normalize this thing by a 3 that means what I am doing and after that you eliminate x 2 from equation number 1 equation number 3 cost function similarly equation number 4. So, what we can do it here if you normalize this one I am writing 1 equation number 1 minus equation number 2 this equation number 2 you have to normalize first then multiplied by 2. So, you have write equation number 2 normalized equation number 2 normalized then multiplied by 2 and stands for normalized equation number 2 normalized by 3 or you can write equation number 2 divided by 3 into 2. Then it subtract from equation number 1. So, if you do this one this is for equation number 2 and this after normalization whatever the equation you got it that you multiplied by 2 added with this one. So, x 2 will be eliminated similarly after normalization this you multiplied by 3 add with this one then x 2 also it eliminate that means I can write it if you see this one that equation number 3 plus equation number 2 normalized by 3 this one multiplied by what this you have to multiplied by 2 added then you will get it x 2 eliminate here x 2 also eliminate here. In this last equation that equation number 4 you add you normalize this one by 3 then multiplied by 3. So, equation number 2 normalized multiplied by 3 then add with equation number 4 if you do this operation then ultimately you will get the table like this way. So, we can say here our with this one pivot element selection x entering basic variable is our x 2 entering basic variable is x 1 is our x 2 and entering living basic variable is your x 6 x 6. So, now you will see that table table 2 basic variables basic variable x 1 x 2 x 3 basic variable in this direction x 3 x 4 x 5 x 6 b ratio. So, whatever the operation I asked you to do this one that this equation you divided by 3 then it will be coming the second equation and our basic variable says here what is this our basic variable x 4 and not changing x 6 is replaced by x 2 this is our basic variable just we have explained it here then second equation I mention it divided by normalize by 3. So, this will be a 2 by 3 this will be 1 this will be minus 1 this will be 0 then x 5 coefficient will be minus one third x 6 coefficient will be x 6 coefficient will be x 6 coefficient will be 1 by 3 then x coefficient will be 2 that b coefficient will be 2. Now, whatever the operation I did it to do if you do this one then this will be coming 5 by 3 what I did it to do this one you see the equation number 2 after normal normalization multiplied by 2. So, you multiply by this 2 that means what I will get it multiplied by 2 that means 4 by 3 4 by 3 3 minus see 3 minus 3 minus this one 3 minus 4 by 4 by 3. So, this one is coming if you see this one that I divided by this 2 by 3. So, I multiplied by this thing is 2 2 by 3 4 by 3. So, 4 by this was here 3 4 by 3 this is nothing but a 9 by 9 minus 4 by 3 is a 5 by 3. So, this is 5 by 3 similarly you have to do all this thing. So, 0 0 1 this will be a 3 by 2 2 by 3 it will be a point or you can write 2 by 3 if you like 2 by 3 this is 2 by 3 this is minus 2 by 3 then this is 8. Similarly, the cost function what I did it that equation number 2 this after normalization you multiply it by this thing by 2 multiplied by 2 and add with equation number 3. So, if you do this one you will get one third 0 0 0 0 0. So, you will get 0 minus 2 third plus 2 third and this will be f plus 4 and this is the artificial cost function artificial artificial cost function. And what I did it for this one you see this after normalization this is the this equation and this equation you multiplied by 3 that is what I am ready to multiply by 3 add with 4 add with this equation add with this equation sorry 4 with this equation. Then you will get it that one 0 0 0 0 0 last is 1 then this is w. Now, you see the last because our job is to minimize this first in phase 1 phase 1 this phase 1 first one to minimize that our w means our cost artificial cost function. You see last of the artificial cost function the reduced coefficient all are positive this all are positive. That means we cannot further reduce the value of the artificial cost function. Then immediately I can write the artificial cost function artificial cost function value w is equal to 0 how x 1 into 0 plus x 2 into 0 x 3 into 0 our basic variables are what x 4 and x 2 others are non basic variables. See x 1 sorry not x 2 x 2 is basic variable x 3 x 5 and x 6. So, now x 6 is non basic variable this into 1 means x 6 is 0. So, w is equal to 0 we got it. So, at this stage from the table 2 we can find from the table 2 this one we can find that x 1 is our non basic variable is 0 x 2 our basic variable x 2 our basic variable x 2 value is what we will get it see x 2 value is 2 directly you can see it is 2 a this into this 0. Similarly, this into this x 2 this is non basic variable 0 this basic variable 0 into this. So, it is a 2 and then x 1 x 2 x 1 is 0 x 2 is 0 then x 3 is our non basic variable 0 x 4 is basic variable state wave from this expression is 8. So, these are the basic variables this and this sorry 2 is the basic variables agree these are the basic variables values and x 4 x 5 is equal to 0 x 6 is a non basic variable 0 x 1 x 3 x 5 x 6 is 0. So, w x 2 is non basic variable this. So, after the end of the phase 1 that means we optimize the artificial objective function value which is equal to 0 then even though we added x 6 x 6 value is 0 this artificial variable. So, at the end of this one our basic solutions we got it this one agree since w is 0. So, this values x 6 value will not be considered in second phase 2 from now on and so phase 2 simplex method phase 2 simplex method phase 2. Since, w 6 w is 0 means x 6 values is 0 we got it this w is equal to x 6 we have considered this is. So, from this the new table what will form it x 6 you can omit or you cannot keep it in the table, but ignore it any operation you do further from onwards agree. So, I will take the table like this way basic variables see from this equation. So, our this optimization value is 0. So, now our only left is x 6 is 0 agree x 6 is 0 that is, but in turn during the phase 1 this our table of equation is now change it this one. Let us see this one x 1 x 2 x 3 x 4 x 5 x 6 will not include in the table even if you include in the table it ignore it is all operation from now onwards. So, our last table if you see this one I am reproducing here the our last table omitting the last column as well as the artificial cost function. Then the our problem is minimizing the our cost function. So, I am writing only this portion if you see from here up to his up to this and including that one this column also this thing I am reproducing now. So, now our say 5 by this is 5 by 3 now 5 by 2 agree. So, we are this is 5 by 3 is 5 by 3. Now see this one we are considering this table now this we have to now optimize that one this. Now, this cost coefficient you see whether we will be further we will be able to minimize the cost function value or not that we have to see it how we will see it that one that you see the reduced cost coefficients this is plus this is plus this is plus this is plus this is plus only this is minus. So, this quantity this that negative most negative coefficient of the cost of objective function is along the x 5 variables. So, this is our pivot column this is our pivot column if you see this column is our pivot column this column again now you find out the ratio that means 8 by multiplied by 8 multiplied by 3 by 2 that it comes 12. Now, this is minus ignored that means this if you consider this is our pivot row then this will not reduce our cost functions agree this will go beyond our what is called our region feasible region if you consider this one. So, this is our pivot this is the pivot row. So, our pivot element is that one. So, what will consider that x 5 is entering basic variable and x 4 is leaving basic variables. So, we can write it now here that our before entering the phase 2 our entering basic entering basic variable is x 5 leaving basic variables leaving basic variables is your that x 4. So, what you have to do here in phase 2 you divide the equation this that means normalize this one 2 by 3. So, if you divide by 2 by 3 this will be 1 and this is will be 3 by 2 minus 1 and this is will be 3 by 2 will be 5 by 2 that one this is 3 this is 3 this will be 5 by 3. So, if you do this one now our basic variables is which one say our basic variable x is leaving as a non basic variable entering x 5 is entering is a basic variable. So, x 5 x 5 and x 2 is our basic variables and remaining are non basic variables x 1 x 3 and x 4 is a non basic variables. So, look this is I divided by what is this I divided by 2 by 3 the normalize by 2 by 3 and you have to eliminate x 5 from equation 2 and 3 that means cost function. Then what will do it I have to multiply by after normalization I have to multiply it by this one third 1 by 3 and add with this equation. So, x 5 is eliminated similarly I multiplied by this 2 by 3 add with this one. So, I am writing here that equation 2 equation 2 add equation 2 you multiplied by this that equation 1 you normalize by 2 by 3 then multiplied by one third whatever you will get it add with equation number 2. If you do this one first you will normalize this one that will give you if you normalize this one that will give you 5 by 2 5 by 2 0 3 by 2 1 and b and ratio 3 by 2 1 minus 1 minus 1 then it will get half 0 and this is 6 and this is a 12 cost function 2 0 0 1 0 f plus 12. You see what I did it this equation number 1 you normalize by 2 by 3 normalize by 2 by 3. So, x 5 coefficient will be 1 x 5 coefficient I normalize by 2 by 3 this will be 3 by 2 you see this will be 3 by 2 this is 0 this is 0 this will be 5 by 2. So, this then what I did multiplied by the this is one third this equation I multiplied by this equation I multiplied by one third and add with this equation then you will get it this things. Now, look whether is there any possibility to reduce the cost function further by looking the reduced cost coefficient and reduced cost coefficient of the cost function objective function all are positive. So, there is no chance of reducing the function value further. So, we will stop our that iteration in phase 2 here suppose you got some of the coefficient in negative then you find out the pivot column pivot element that pivot row and then pivot element proceed in the similar manner. So, from this table so, from this table we get x 5 is equal to 12 x 2 is equal to 6 similar manner agree this is the basic variables and what are the non basic variable x 1 is equal to x 3 is equal to x 4 is equal to 0 is a non basic variables. Then what is our function value function value is minus 12 and our problem if you see the earlier our problem this problem what we have to solve it here you see that one maximize z. So, z value is what z value is minus of minus of this one. So, it will be a 12 plus and what is our corresponding y 1 y 2 all this things y 1 we have considered x 1.  So, 6 minus 0 is equal to 6 that y 2 value is 6 and the other values x 2 value which we got it x 3 and y 1 y 2 value you got it. So, y 2 value is 6 and y 1 value is from this one y 1 value is this. So, graphically if you see this one if you see this figure in graphically in original problem you will see this one that our y 1 is greater than if you see this one that y 1 is greater than 0 y 1 if you consider in this directions and y 2 is in this directions agree. And y 2 can be positive and negative that means this will be on the line. This one and this region this region is y 1 greater than equal to 0 agree and this region that what is called and this region not this region you do not know that either top side or bottom side is y 2 if it is bottom top side it is y 2 greater than 0 and bottom side is y 1 less than y 2 is less than 0. So, our if you draw the equation number this and this and this you will see you will get it something like this equation. So, when y 2 is 0 that what we are getting the y 2 is 0 x y 1 is 4 y 1 is 4 then 1 y 1 is 0 y y 2 is 6 though it is not drawn to the scale. Let us call forget this is I am drawing to the scale is like this way forget about this one this is a 4. So, this is our which side is this one. So, this is our this expression this expression is 3 y 1 plus 3 y 2 2 y 2 2 y 2 is less than equal to 12 agree and another equation if you see that one this will be a it will go it can go extend like this way and this values is and that equation is twice y 1 plus 3 y 2 is greater than equal to 6 and this is what I am doing. So, next class I will discuss the figure more clearly we will stop it here.


Yeah, my point, mofo! Oh, dear. Oh, dear, dear, dear, dear, dear, dear, dear. Yeah, he's just becoming boring now. This is my heavy. Oh, he's protecting me while a good man. Viaccia! Yeah, he's just becoming boring, he is. I ain't never getting nothing, man. I didn't really want to do it on my Titan. I definitely want to do it on my Warlock. Yep, well, shoot. The flame's ignited. Let the wolves hunt.   The battlefield is yours. Finish it. I'm gonna blow some baddie. Let the wolves rest. The hunt is over. Where are you going, boys? Oh, I'm so dead. Save me, teammate! No, okay then. Wolf and V fat. Wolf and Mrs. Wolf. Oh, we got a couple on the other team. I have that. I didn't even notice. Noise. Noise. There's our Pop-Man. Super. On you. Calm down, boy. Just got one. Please, game. He's got Foot Detector and... Quickdraw. And Blast Radius Masterwork. I actually can't believe it. I don't have to play no more Iron Banner. I don't have to play no more this... Utter Garbage. The swarm of the Raven... is finally mine. Because if I shaft, I'm gonna wake up my whole family.


Hi, I'm Mass Torgerson and I'm the lead designer for C-Sharp. I want to welcome you to Microsoft Connect and share with you some of the major features that are coming into C-Sharp 8, the first of which you can actually try out in their preview that's come out at the time of this event. So I'm going to show, as many are in the preview, I'm going to show in Visual Studio. I'm going to head over there right now, and for the remainder, we'll take a quick tour and slides and they will show up in later previews and of course in the final product. So the first thing I want to talk about is Null, which has cost many an exception, a null reference exception in production code sometimes, and which we really want to do a better job in C-Sharp helping you avoid. So if you look at the code here, just a quick run through of the flow, I'm getting some subscribers, I'm getting the names of those subscribers through a helper method, which in turn is getting the name of each subscriber, which in turn is constructing a string based on the data, the strings that are inside of the person class that is in the subscribers collection. So let's just go ahead and run this code and I have some fun seeing all these nice names being printed out, and whoops, two came out, but now of course we have a null reference exception. The null reference exception, if we can scroll a little here, turns out that it is in that code producing the string, and of course it's the middle name that turns out to be null in the third person I was trying to render here, and therefore indexing into it leads to null reference exception. Well, wouldn't it have been nice if I had known ahead of time, not when my customer sent in this bug report. So that's exactly what nullable reference types are about as a feature. Essentially, nullable reference types are about solving the problem of finding out where nulls should be and where they shouldn't be, and tracking where they will be and won't be. So to make that concrete, let's start out by actually enabling the nullable reference types feature and I need to enable it. I can enable it for the whole project here, I'm just going to do it in source code, so you can turn it on and off. And the reason why it needs to be enabled, unlike all other C share of language features, is that it will give new warnings in existing code, and we don't want to do that to you when you upgrade, except when you opt into that. So you can see that when I type nullable enable here, I got a little green smudge here. That's a warning that showed up in my code because I enabled the new feature. So let's go and see what that warning is all about. It says that this constructor does not initialize the non-nullable property middle name. Well, non-nullable, what does that mean? Well, it means that when you turn this feature on, forevermore and C sharp, we consider your ordinary reference types to be non-nullable. We will stop letting you put null into them. So that seems a little harsh maybe, but it does ensure that you won't get that null later, so it might not be such a bad choice. So I'm not initializing it, maybe I could initialize it with null instead and make that warning go away. And indeed, this warning goes away, I'm now initializing it, but I get another warning saying, you can't put null into this, it's a non-nullable reference type. Well, what if I want my nulls? They're in the language for a reason, you can't just ban them. And sure enough, you can have nulls, but now you have to own up to it. You have to express, we're expressing here in a public API, yes, we will have nulls, beware here might be nulls, okay? So we've taken responsibility and told the rest of the world that nulls can be here. And now on the receiving end, the line of code up here that is trying to index into the middle name, now we get a warning here saying, oh, there's possible dereference of null. What can you do about that? Well, you can do what you always did. You can check for null before you dereference. So I can say if p.middleName is not equal to null, before I return that, and you see that the warning goes away. So essentially the compiler is tracking where it's tracking p.middleName here and anything else nullable and tracking where might it actually be null. And you just checked and saw that it wasn't null, so on this branch here, can't be null. And that goes regardless of how you check for null today, compiler is doing its best to track that and remove those warnings when it sees that you have actually checked properly and ensure there's no null in there. So another way that we could be doing this is that we could actually, we could do it as a conditional ternary expression, we could return that question mark this, copy and paste, put a colon. So bear with me as I reformat my code, but you can see now on the two branches of the conditional, one of them gets a warning and one doesn't, depending on whether the compiler sees that it might be null or not. And of course, on the one where it might be null, we'll just remove it from the result and return a string that doesn't make use of the middle name that isn't there. Okay, so that's nullable reference types. The next thing I wanna share is async streams. So in reality here, so I'm iterating over subscribers, I'm kind of imagining this as sort of a live thing, whenever somebody subscribes, I get the name as part of a stream and then I get them as part of a stream, then I get the name of that and I print that out. So this happens over time asynchronously. We're lacking a notion of async streams in C-sharp today and we're doing something about that and integrating that into the language. So let's say that I get an async version of subscribers and instead of being an inumerable now then, I async innumerable. That's like an innumerable, it can be for each. But it's one that's async, so you sometimes have to await the next element. And of course now I need to change get names to take an async innumerable and now for each won't work because you can't for each over async innumerables but you can't wait for each over them. So that's a little bit of new syntax that lets you for each over asynchronous streams. Of course I can only await if I'm inside of an async method but an async method can't return an inumerable. It has to return something async but that async thing can be another async innumerable. So now you're getting an asynchronous stream of the results here and if you look up here now I have to also await for each the result of this call and I can only await if I'm in an async method but I can make main methods async now as of C-sharp 7.2 and so now my code is back to working again and if we try running it, you can see that as these names trickle in over time, the results are produced and printed out and that for each loop is just sort of awaiting for every round with some delay and there we go, we've iterated the list that's produced and the program terminates. So that's async streams. The last feature I wanna show you directly in code, it's a tiny little one but we think it's gonna be very useful. Inside of my fake service here that I've been using all along I'm actually creating an array of people and then yielding that back out. Now, wouldn't it be nice if I could easily specify a subrange as slice if you will of that array and you can do that now with the range syntax so I can say I only wanna get from one to three out of this array and actually there's a syntax we're saying well I want one from the beginning and one from the end and then I'm sort of slicing off the out of most elements so the hat there means from end and that's the async, sorry, that's the ranges feature in C-sharp and that's pretty much it for the preview so let's go back to the slides and see some of the features that will show up in subsequent releases. So we saw this code here in the example before where I'm choosing between whether the middle name is null or not but actually the first name or the last name should probably also be able to be null. It's not always that people have first names or last names or maybe they have the names but they weren't recorded here or they didn't wanna give them or whatever. So we should expand this logic to more like a switch over all the different combinations and you can now do that using what we call recursive patterns. So I'm switching over a tuple of the three strings here and then in my case is I can put a pattern that also looks like a tuple. We call this a tuple pattern but inside of it it has other patterns which are then used to match against the elements of the tuple. So here I'm matching where they are non-null strings and here's the case for matching when the middle one is null. Of course we should also think about when the last name is the one that's null or when both are null or actually when the first name is null or there's actually eight different cases here and so your switch gets kinda clunky now and we've long felt that switch was a little long in the tooth in terms of being heavy syntactically so we decided now's the time to add switch expressions which is sort of a spiffed up version of switches that are an expression form. So here's that same code written with switch expressions. So the switch expression here is everything but the return and the semicolon. It has an expression. Then the switch keyword after that so it composes better with other expressions and then a list of cases that are just a pattern, an arrow and an expression for the result. And I think it kinda looks nice here that you can do these one-liners, you can do this tabular sort of layout and really see, you can sort of visually check that we handle all the cases here but beyond that actually because an expression has to produce a result, the compiler will actually check that you don't get to the end with some of the possible values not actually being handled so the compiler will give you a warning if you're missing some and if you ignore that warning, it'll generate code to throw an exception. An exception that says, well you ran out of the end of a switch expression, you can do that. So that's switch expressions. Tiny little but very neat little syntactic sugar feature. If I'm already saying up here that this array is an array of persons, why do I have to repeat the type every time? In general, when I'm in a context where the type is clear, why do I have to repeat myself? Say it's a big generic type or something when I knew up the object. Can't you just infer that? Well now we can. You don't have to specify these guys. You can just, when it's given from context that these should be persons, you can just write the new expressions like this. And then finally, default interface members are a feature that helps make it easier to evolve interfaces. Once you've published an interface, you're already locked in because if you add another member to it, your implementers will break. But we're now adding the ability to add members with, actually with a method body which is a little unusual for interfaces but it's going to be really useful because now existing implementers like console.log or down here, they can get that default implementation without having to change and therefore you've added that member without breaking them. Of course, new implementations will likely provide their own implementation. So this is mostly a feature just to make sure that you are compatible. That was everything. Have a great connect. Thank you very much.


A new study shows that South Asians are more likely to get heart disease than the general population, let's talk about why. Yeah, I mean this is a study that I was not familiar with, but there's a ton of material on the internet whether it's TikTok videos or Reddit threads, let's run the clip. South Asians are a starvation adapted due to having to survive at least 31 major famines, especially during the 18th and 19th centuries along with chronic undernourishment. Did you know that South Asian bodies are made differently from other ethnicities? For instance, a young healthy Caucasian can eat a cup of cream or ice cream every day and nothing happens. But if a young healthy South Asian does that for just five days, guess what? They will become pre-diabetic. Hey guys, did you know that heart disease is a major concern amongst the South Asians? Shockingly, they develop heart disease a decade earlier than other ethnicities and have the highest death rate from this disease. Boom! I mean, you know what's really interesting is there have been a ton of articles on reputable papers like New York Times and other medical journals that have popped up saying why do South Asians have such high rates of heart disease? It is a 4x the average person in America. So listen guys, make sure you like, subscribe, turn on your notifications. We're only doing this video because I think there's a lot of interesting like nature versus nurture elements that really could apply to anything really wrapped up in this whole discussion. Right. And of course, a lot of people are bringing up the term bad genetics, but ultimately guys, a lot of different types of people suffer from certain things more than others. But I think this is one of the things that maybe South Asians have more of an issue with while other races may have issues with other things. So anyways, yeah, I mean, we want to talk about it. Right, right, right. For example, Andrew, I believe that white women have the highest rate of skin cancer. I believe that the African American population has the highest rate of sickle cell. I know that Asian, East Asians, Andrew, they consume a lot of salty meats. So sometimes there is issues with like consuming too much nitrites. Yeah, also in the downstream effects of that. Also, East Asians have a high rate of not being able to process alcohol molecules, the Asian glow. So I guess anyways, but we're going to get into all this. So guys, if you're interested by this conversation, hopefully it'll end up being insightful. Right, right, right. I will say this anecdotally, Andrew, I have a Punjabi friend named Dal Beer and he is overweight. He's good at hooping, but he's clearly overweight. He will not stop eating tons of naan. Like he can't stop. Like we were talking about it. You know, I see him in the gym sometimes and it's just like part of some, I don't know. Maybe it's a part of his lifestyle. He's just not willing to part with yet. Okay, naan is delicious, by the way, but yes, probably not great for you over the long term. Right, right, right. So I just think that there's a lot of talk. And by the way, guys, all the comments that I pulled from this video, they're from Indian forums on Reddit. These are like South Asians speaking to other South Asians. This is not people coming in from the outside to like point fingers at people. This is for me, Andrew, an issue I was not even aware of. And so anyway, people are talking about genetics, right? So people are saying, do Indians have very small blood vessels or do they not are not able to replenish their white blood cells as much or as fast? And what sort of impacts does that have? And even if it's true or not, Andrew, should this be something that even people want to think about? Because when you think about something where you are maybe potentially and obviously everybody's going to argue over extremity or intensity of like being genetically disadvantaged, Andrew, wouldn't that affect your behaviors for the rest of your life if you knew it about yourself? Yeah, I guess I could see that. Yeah. So I guess what I'm trying to say is like, for example, if you are like West African Nigerian, that is a region of the world that is stereotyped for having very good genetics for athletics. For example, India is stereotyped.  But it doesn't mean that for an average person, it's going to have much bearing because at the end of the day, I think like development to a pro level. And then I do think there are some downstream impacts on like the average population, but it probably shouldn't because once we get to the pro level, that's the only time where you see the genetic differences pop up. So anyway, let's just take a look at that comment section. Somebody said, yep, we're here for a good time, not a long time.  And that mindset has contributed to obesity and obesity is shunned in modern 2024. Andrew, how much do you think it is these ancient cultures? They just have like aligned certain incentives or identities that seem out of place in 2024? I don't know. I mean, I think that I guess if culture over many generations, I mean, and all these things are probably hereditary to an extent. But like, if that has been the culture for so long, I guess, but I also don't imagine and I don't perceive India to be like this super overweight place. Like I've seen chubby Indians, of course, but I like when you look at videos of India, everybody seems pretty thin. But that doesn't mean just because they're visually thin that they're healthy. Right. And I guess that this is where the study was coming into play saying that over generations of famine. And of course, there was a lot of discussion in the comment section and it was due to the British and colonialism.  But in a time where food sources are more stabilized, then that fat may like wrap around the organs more, which leads to the heart disease. Well, I'll tell you this, Asians actually are suffering from pretty high rates of diabetes right now because of the types of food that a lot of Asians are consuming right now. Salty meats. No, I mean, a lot of sweets, a lot of extra carbs, all the sweet snacks, even things like Boba. If you drink that too much, I mean, let's be honest, that's that's a lot of sugar and carbs right there. So that's going to lead you to be pre-diabetic. So I think a lot of saying a matcha cheese tart is not good for you. Dude, there's a lot of amazing Asian snacks out there.  Right. This led to the next comment section, Andrew. Somebody said the food is just too good. That's why an Indian person chimed in and said, see, you get it. We just can't get away from it. But other people said, you know, a lot of vegetarians, there's a lot of vegetarians in India, right? Just due to religious reasons, a lot of people don't eat meat. However, Andrew, if you eat a fried vegetable pakora, fried a vegetable oil, it's still bad for you. Sure, sure. I can see that. Right, right, right. Other people said we're pointing out the rice and the non-consumption, because it just leads to high carbs, but a lot of sugar, but low protein. Okay, I could see the low protein aspect over many generations, I guess. Right, right, right. I think that other people were talking about lack of sports culture. Like, it's just not deeply ingrained yet. You know what I mean? So does the lack of sports culture over time change the genetics? Possibly, right? I guess over a long period of time. But I guess, like, who has a long... I wouldn't say China has, like, a long sports culture in the Western sense. I don't know. Right. I don't know, yeah. I don't know about that argument. That's what I'm saying. Sports culture, we're talking about a relatively new thing. That's, like, a last-hundred-year thing. Right, right, right. So, yeah, I think it really has more to do with diet and embracement of exercise, probably, for sure. And there's probably some genetics involved. Well, a lot of people were saying India is too hot to really exercise. That's why the habits carried on once people immigrated to less hot countries. Like, the sense of, like, the behaviors developed when it was too hot. Listen, guys, these are all Indian comments by Indian people, by the way. All South Asian comments, zero from non-South Asians. I'm just reading them. Other people were talking about stress levels. A lot of people have a lot of high stress levels due to they need to send money back home. They need to support a lot of people. Everybody's counting on them to, like, make it in the West. So, they're going to get, like, a software engineering job, and that's not going to lead them to, like, that's more like a sedentary lifestyle.  Of course, everybody was just talking about all these different things. You know, sleeping late after a late... I mean, sleeping after a late dinner, which is really common, and or Cantonese people also famous for eating dinner at 9 or 10 p.m. at night. And other people were pointing out things like arranged marriages because people don't need to, like, necessarily look good for the open dating market because they will have arranged marriages or something set up through an auxiliary system. That is a funny reason. I actually don't know if that has a huge impact on it, but maybe, yeah, I guess, you don't got to get fit because you know that you're already going to get married, but what percentage is that? You know, not even everybody. I mean, also this study, are they talking about South Asians in America? South Asian Americans? Right, yeah. Which they would not suffer from the whole, like... Well, according to the study, globally, South Asians make up 25% of the world's population, but they account for more than 50% of the cardiovascular-related issues. Yeah. I guess, yeah. I don't know. This is the last comment, guys, and I think I'll end with this because I think it sums up what is quite logical. Somebody said, you know, these big, macro-racial averages are just averages. There still are really short Dutchmen. Dutch people are the tallest people in the world and really tall Cambodians. I believe Cambodians are some of the shortest people in the world statistically. Despite the average trends, you could be the exception. Just go work out. Somebody else said, every population has people with elite muscle genetics and trash muscle genetics. The average is just the average. If the math class average on a test is 75, it doesn't mean that somebody didn't score 100. It just means that a lot of people scored really low to bring the average down. Yeah, also, so if they're talking about by the amount of people with heart disease, then India being, like, the biggest country, of course it's going to have a lot of people that have heart disease. Well, South Asians are 25% of the world. That's a lot. Yeah. That's a lot of the world. Right. And it goes back to what I was saying about like a group, a quote unquote, a group being over indexing on a particular trade. Yeah. Like I said, like white women with, I believe melanoma or due to maybe tanning or whatever, you know, I'll tell you this, man, I always think it's a lot of factors. Like let's say, for example, let's just example, Andrew, look at white women with skin cancer. White women, their skin doesn't have a lot of melanin, but they like to tan a lot in tanning booths. That's why tanning booths in 2024 have become very untrendy due to new science, new studies, new macro, big data that's been analyzed by, you know, third, fourth, fifth parties corroborated by so many PhD genius scientists. That's why it's going out of style because that group probably has some genetic thing that's like, man, that behavior is super not meant for it. But then they, if they lean into that behavior, like white women leaning into sun tanning beds, then you get these like incredibly, I guess, like big patterns. So I just feel like that's like it is with anything.  I don't just think it's one thing. I don't think it's the other thing, but we got to be scientific and we got to just weigh things out. All right, everybody, let us know what you think about this. Do Indians have bad genetics for sports? I'm not saying they do. Obviously that's the clickbait title that a lot of people are having, but I think it's a number of factors. So you guys let us know if you've heard about this, if you're Indian or Desi or South Asian, if you've heard about this, if you've talked about it with your friends, talked about it with your family, what's the solution, what can you do? And thank you so much. Hit that like button. Until next time, we out. Peace.


Namaskar. This is Professor Devati Purkayastha from the Indian Institute of Technology, Bombay. Welcome to my course, Business Fundamental for Entrepreneurs, Part 1, Internal Operations. This is the conclusion and the wrap up of the course. So I'll take a few minutes to share with you what you have covered in the course, look back on the course and then encourage you to think a little bit about what comes next. So let me start by looking back and recapping what I've shared with you. Here is the course flow. If you look at the screen you'll see that I've started with what is business, what is a company, types of companies. Then you went inside the company to have a look at companies, vision, mission, goal, purpose, strategy, culture. We then looked into the operational aspects inside the company. How do companies innovate and create new products? How do a mass manufacture and create millions and crores of copies of the new product? How do they manage quality? How do they manage their finances? And then importantly, how do the leaders of a company lead the company? What are the leadership skills, etc. And how do you manage the human resources which are the employees of a company? And then I talked a little bit about environmental, social and governance aspects of a company. Let's quickly run through each of the modules. Just to remind, every module had six topics, two reflection points, where it could pause for a few minutes and think about the course and write down in your journal what you have learnt and how you apply your learnings. And then of course there's an online assignment for every module. So this was module number one. The six topics. Let me pause for a minute and for you to remind yourselves about the very first module that we have shared. So that was about business. The second module to remind you was about a company. What's a company? Characteristics, laws, types of companies, finding and founding a new company, etc. Think back about this module. In the next module, module number three, I talked about the purpose of a company. Values, mission, vision, goals of a company. How to measure the performance of a company. And how do companies report? So outsiders know what goes on in the company. The next module, module number four was going into what is called strategy of a company. You would have heard the term strategy. I talked a lot about what is strategy, the strategic planning process, how to implement strategy. And then very importantly the culture of a company. How to create a culture and how to transform a culture. That's what I talked about. The next module, module number five, we looked at how do companies innovate? What are the drivers of innovation, types of innovation? What is the process of innovation in a company? And how do new products come out as part of the innovation process? The sixth module was about mass manufacturing. What is the process of mass manufacturing? How do you ensure that each of the products meet the quality standards and the quality certification? From product development and product manufacturing, we then moved on to accounting and finance. So in module number seven, I talked about what is accounting? What is the accounting process? What are financial statements, profit and loss, balance sheet, cash flow, etc. Which you'll hear in the common world. How to budget for your financials? How to control your financials? That was topic number seven. Topic number eight covered very important aspects of leadership, leadership styles, leadership skills. And then how to manage the employees of a company. And the last module, very important module was about ESG. How do responsible companies take care of the environment, society itself, and are well-governed? And why is ESG increasingly important? Because the investments are going in there and companies can generate better returns operating of ESG principles. So that was the first part of business fundamentals for entrepreneurs. Part one, internal operations. The second part, which will come in the next semester is business fundamental for entrepreneurs. Part two, external operations. That's a different course and you have to enroll for it differently. But together, part one and part two will give you a complete overview of how a company operates internally and externally. So let's look at what are the topics and the discussion flow in part two. These are the modules in part two, which is a different course. Here the focus is on external. So we'll start with if you are working in a company or setting up a company. How do you do market and competition analysis? How do you identify your customer, customer profiles and segments? Once you've done that and you've developed the new products, which I talked in the first part. How do you do marketing and positioning? How do you brand your products and advertise them? Then I'll talk about how do you sell business to business, which means how do you sell to big customers? How do you sell to companies and B to C, which means how do you sell to individual consumers? Then I will talk about how do you do customer service and generate customer loyalty? And then I'll talk about how do you manage your supply chain? How do you make sure that your goods flow all the way from the factories through to the end consumer? Or another company who's your customer? And the final module in the next course will be around how do you do retail distribution? For example, how do you sell in an e-commerce platform or a small store or a big store? So this is planned in part two, which should be introduced in the coming semesters. Now let me request you to reflect a bit about what you have learned in the course and what you want to do in the future. So reflect on the modules and topics of this course. Look at your journal, the notes that you have taken in all the previous reflection points. And try to remember what you have learned. Going forward, try to apply in your real life.  What courses do you want to do next? If you're an employee, use that to get a broad-based understanding of the company and decide your career in the company.  So take some time to reflect on the course and write down in your journal, like just like you have written down in your previous modules. So this brings us to the end of the course. I hope you found the course useful. I hope you'll use the learnings of the course into your real life. I hope that you will have a better career choice, whether you're a student or an employee or an aspiring entrepreneur. And I hope that based on what you've learned in this course, you can take more courses. You can take the second part of my course or you can take other management and entrepreneurial courses. So with this, from IT Bombay, from NPTEL and from my side, Prasadev De Purkayastha, I wish you the very best in your career. Good luck and thank you.


Everybody forced here ripping 2022 playbook football hobby eight bucks half case number 15 random team style Find those results anytime elitonsportscards.com. We're gonna get started now Yeah, but story is gone in cool places. I think the acting needs been really good Illegal probably do this for like another That's okay the good the bad of the forest so I am the ugly is what you're saying That's that's what illegal saying he meant it patch card is 75 down and dirty cream hunt Browns is game used Down and dirty Man DK Metcalf Seahawks Jersey to 199 hot routes Autograph Vikings Alexander Madison number to the 99 line graphs And playbook Jersey Auto What eight of ten Mike Williams for color patch great hit Chargers Karen W. Congrats Karen Mike will Thank you, Donnie would not have would not have thought twice about it, you know What do you make Cory Davis the 49 down and dirty for the Jets. What are you doing right now? That one song with Wiz Khalifa and Miley Cyrus Kenny goes on my head one of nine Dallas Cowboys hot routes is CD lamb Jersey card Forests 11 Do I just have my ankle so hard in the chair? Gus Edwards on a 1099 there you go Ravens Gus bus The ball of my ankle just smacked into like one of the chair like legs Oof Bit that's I'm Frank. I'm Frank Thomas right now. I'm the big hurt Jing likes that one. I know he does Desmond Ritter rookie playbook Jersey Auto Falcons Number 53 of 199 like forest 11. That's a good one though because ocean I get it. Yeah, it's a you know Man It's not like horribly horribly bad as bad as you can like sitting it is moving your leg normally, you know what I mean But Well stinger. Well stinger hatched card to 49 Lombardi Lenny for the Bucks Lombardi Lenny Kenneth Walker the third rookie auto Seahawks 32 49 the seabirds. I think somebody did illegal. I Think someone did like three hours ago, but sure It's Jeff George shotgun signatures falcons to 99 you scroll all the way. Oh, yeah, I'm on there you go And Garrett Wilson a 49 jets on the rookie jumbo dual patch auto book not not I'm sorry not auto just dual patch book Jets green color match to it's good looking card He just spelled out 11 Let's go. Okay, see come on now The torture chamber shot clock violation. Oh into the first sorry patch card to 49 down a dirty game used bossa chargers Joe bossa I got you Also known as Joey bossa Raiders jumbo Jersey to one 99 mammoth material is a mirror whites rookie Jersey Vikings rookie auto Lewis seen to 49 Commanders now Sam Howell rookie Jersey auto playbook 182 of 199 it's got a howl and a What's his name howland, you know who? Ritter What is this? Where's this from? Arby's I'm down dual Jersey Derek Henry to one 99 for the for the for the Titans Titans again God team trios Malik Willis Derek Henry trail on Berks the 99 triple Jersey. I'm in Oceans 11 is a fantastic movie Traylon Berks five of five or two years price working out on five of five So I was thinking about Titans still five of five auto Terry Davis price Niners. That's a nice card and Niners of the Fred Warner to 35 rookie Jersey autograph congrats Niners That's a rookie. Yeah, it's just Jersey auto. I'm doing too much right now. I need to slow it down Three knowledge chats that I need all two chats It's late gotta get eminence filled up Long week patch card to 99 Terry Davis price patch card for the Niners plus. I'm excited to raise finally lost Raise you're coming for the the Red Tox coming for first now Coming for it Terry Davis price patch card at 99. That's what you were trolling me all week. You told me all week That's Jersey pier strong jr. To 199 for the Pats I'm in Florida. How dare I read Yeah, the education system actually won't let you read in Florida Jamal Williams alliance goal line graphs to 199 the guy that scored 16 touchdowns.  What it's weird. I'm alive as far as I know unless it's purgatory four of ten Bailey Zappy rookie patch on a book Patriots Everyone keeps saying wait till the Bruins lose And we'll just keep saying it man All anybody's been saying for like four months now first round exit ruins are gonna lose Sunday's best Jersey card rusted 99 Broncos Jets Jersey Bree Sultan 99 yearbook. I don't know 16 touchdowns. Oh, you know what? We don't want 16 touchdowns. We want less than that from our our second string running back rookie autos Sam Williams for the Cowboys It's not only that they decided to pay a running back, which is odd Weird move and sky more chiefs in 99 rookie Jersey auto book.   I'd rather be a waffle house line cook Jersey card to one 99 Calvin Austin a third Steelers Bill's patch to 99 James Cook three-color patch Spencer, do you know Jared Goff?  I've ever worked in has been you know, it's like it's like over 85 degrees in it Minimum that's if you're not unlike but over a grill the whole time, you know Griller like saute station or something like that or a fryer. That's how every kitchen is for the most part And you got heat lamps and stuff on windows. Yeah, right recap time you just get used to it I think Or you just live in Florida and then you walk in you're like, oh it feels same as it does outside Calvin Austin a third Pierre Strong, Jr. Is it me right where it's cooler in the kitchen than it is outside? Derek Henry CD lamb DK Metcalf triple Titans was Willis Berks and Henry Russ James Cook Davis Price Got a breeze. Oh Game used on the Kareem Hunt gave us in the Cory Davis Leonard Burnett game use on the Bosa autos of CD lamb Sam Williams Jamal Williams Jeff George Gus Edwards Alexander Madison to 49 Kenneth Walker the third Louis scene Davis price to five Books here. We had dual patch book Garrett Wilson Everything else is auto patch book Fred Warner Mike Williams to 10 for the Chargers Sam Howell Desmond Ritter sky more Bailey zappy to 10 Patriots and Damian Pierce to 49 and that's gonna do it. Thanks everybody on to another half case


Hello, everybody, and welcome here. Today, we are going to see our instrument application and do a lot of things with Prometheus. My goal today is to convince you that metrics are a great way to improve software delivery. That adding instrumentation to your applications is something relatively easy to do, and that Prometheus is definitely a great tool for that. A few words about myself. I work at Red Hat, mostly developing on Prometheus. I'm one of the maintainers of Allot Manager and a member of the Prometheus team. Before we go directly to the topic, I wanted to do a quick show of hands. Who, before this presentation, have heard about Prometheus? OK, so quite a lot of people. And who is already using it? Like, OK, that's, I would say, half of the audience. So what's Prometheus? At its core, Prometheus is a monitoring system. It does so by collecting, storing, and querying, and alerting on metrics. The origin of Prometheus has been developed by SunCloud startup in 2012, I think, yeah. It went really public in 2015, so four years ago. And since then, it has become more and more popular. And today, it's backed by several companies and individuals that contribute to it. So unlike, I would say, if we compare Prometheus to other systems, I can say that more traditional monitoring systems like Nagios or Xabix that you may know rely more on external checks for the applications that they want to monitor. That means that they don't require particular cooperation from the systems that are being monitored. The paradigm shift with Prometheus is that we expect the applications that we want to monitor to be observable from the outside. That is, instead of being black boxes, they need to expose their state. They are something that will tell us how they behave. And this process is what we call instrumentation. In this presentation, I'm going to focus exclusively on metrics instrumentation, but you can think of logs and events or traces or other forms of instrumentation, which are also interesting to investigate. So let's see for those that are not familiar with Prometheus, how this all works. You can see on this diagram, on the right, we've got the Prometheus server, which is in charge of collecting and storing metrics. And on the left side, we've got our systems that we want to monitor. We can see that Prometheus is what we call a pull-based system in the sense that it doesn't expect an agent to be pushing the metrics. It will take the initiative to retrieve the metrics by itself. It's doing so by performing HTTP or HTTPS request to specific endpoints, what we call metric endpoints. And it does so at regular intervals. Typically, every minute, it's going to what we call scrape the metrics from the targets, from the application that we want to monitor. We have two options for our application to expose the metrics. The first one at the top, so the first application, is using what we call a client library. There exists many, for many languages, like we've got for Python, Java, C, C++, Ruby. Any, I would say today, any programming language as a Prometheus library. This library will offer an API where we are going to create and register metrics. We are going to be able to manipulate the metrics, like to increment them, or to set them to a certain value. And finally, the library will allow us to expose those metrics to Prometheus through HTTP. And what Prometheus gets is what we have at the bottom of the slide. It's a simple text format, which can be readable by humans. And we will describe that right after. So the first option, using a client library, is something that we highly recommend, if it's possible. But in some cases, there are limitations. For instance, we may have written the application years ago, and we don't want to modify it, or we can't really, we don't have the resources to do it. Or maybe the application is already instrumented. Like if you think about Java, you may have GMX in place, and you don't want to rewrite everything because that would be too painful. In that case, we run something that we call an exporter, which is a process that will run next to our application and will be in charge of converting this internal metric format to something that Prometheus can understand. This has obviously an operational cost, like you need to maintain the exporter side by side with your application. Let's go now to more the data format that Prometheus is using. We can see here what we call a time series, which is a reference to something that we want to measure. This time series has two parts. The left part is the name of the metric. That's something that represents the entity that we are measuring. In that case, the name says that it's a total number of HTTP requests that is done by our application. The right side is what we call labels. You can also hear dimensions or tags, but synonyms for the same thing. A label is just as a key and as a value. And the goal of labels is to allow us to filter or aggregate the metrics, the time series, as we wish. In this, the example that I show, we have two different types of labels. We have the code, so the HTTP code and the HTTP method, which are labels added by our web application. And so we can have multiple time series combining different values for those labels. And we've got the job and the instance labels, which are dimensions, which are added by Prometheus when it retrieves the metrics from the target. In that case, the job is some kind of logical entity that will represent our service. And the instance is the address of the application that is from which we get the metrics. So this is what's exposed by the application. So we'll have Prometheus at a specific point in time. So let's call it T that will scrape the target, get the text format, and convert it to samples that we have on the right of the table. Samples are floating point values in the Prometheus time series database. So that's specifically 64-bit floating point values and associated to a timestamp and associated, obviously, to a time series. Then at the next scrape interval, which in that example happened one minute later, Prometheus will again get the metrics, values, store it in its internal database, and repeat that operation again and again until the application stops to run. A small implementation detail on the time series database that Prometheus is using have said that values are 64-bit floating points. But thanks to compression, we managed to get, on average, a single sample is stored as one or two bytes on disk. Now that we have the samples in Prometheus, we can use that to query Prometheus itself. So there is a Prometheus query language, which is specific to Prometheus, something different from SQL or any other kind of query language. The short name is promptql. The simplest query that we can run is just to ask Prometheus for all the time series for a given metric at a specific point in time. So this is what we got on the slide. If I ask for the metric name HTTP request total, I will get these three samples written by Prometheus. I can filter down using label selectors. So I can say I want only the metric for the code 400. So in that case, I will get only one sample. So these are the first two examples of queries are what we call instant vector. They are sample value at a specific point in time. We can also do range vectors, which is asking Prometheus about all the samples in a given interval, in a given range. In that case, I want all the HTTP request total with code equal to 400 over the last five minutes. By itself, it's not really interesting. But what we apply generally on this selector is a function such as rate that will compute the rate of change for this metric over the last five minutes. And in that case, the answer is approximately that value. So that will give us the number of requests per second that the application has done for this particular set of labels. We can do things even more complicated. We can do arithmetic. We can do comparison. And the last example I've put on the slide is something that you would typically use for alerting. And the query reads as we are computing the total number, the total, sorry, the sum of error rate, error being any 500 something HTTP status codes, divided by the total number of requests that our application is doing. And so if that percentage is above 5%, then Prometheus is going to return some results to us. So Prometheus, in a few words, in a nutshell, we've got a powerful query language from QL. We've got, like we've seen, a model which is pool-based combined with some service discovery mechanisms. It's really useful because we can automatically detect when your targets are coming up or down. But that's another complete different topic. We've seen that alerting, like everything in Prometheus, is based on time series. There's no difference between an alert and a standard query, I would say. And last important point is that we've got, Prometheus is really simple to operate. So that's return-and-go, a single binary. You don't just need to download the executable and run it, and it's ready to operate. There are no external dependencies on any storage or database. We just require a local file system to store the data, and that's it. You can get it running on your laptop, in your test, in your CI very, very easily. So that concludes the part for those that were not really familiar with Prometheus, what it does exactly. Now, back to the title of the talk. Why would you want to instrument your software? Well, the first obvious reason is that we ship software for people to consume it for customers to use it. So we want to be aware whether what we ship is something that meets the quality of service that our users expect. To do that, metrics are really good indicators, because if we get our applications to expose information about how many requests it's doing, how many requests fail, how long it takes to serve a request, then we get an idea of what our customers are experiencing. So that's, I would say, the main motivation why you want to instrument your code, your services, your system. The second reason, which is a bit different, is that metrics are also really good for troubleshooting and debugging purposes. You have obviously an integration test. You have benchmarks. You have staging environments, which are, I'm not saying you should replace. But we all know about issues that only manifest when we run our systems in production. And having metrics in place, you can accelerate the time it takes for you to identify the cause of issues. Let's say that your application is doing requests to a database. If you notice, or if you have metrics that report that some requests are failing, you can then ask your monitoring system whether your database requests are also failing. If not, then you know that you need to look for something else. Again, I'm not saying that metrics are a replacement for logs and traces, but they provide real time insights that can greatly improve the time it takes for you to identify problems. The third reason I will mention for why you want to have instrumentation in place is to do some capacity planning. If I can correlate how I use physical resources, or my application is using physical resources, with how many requests I'm doing, then I can better understand whether I'm over provision or under provision. Again, the role of metrics is to provide us with concrete data about what our application is doing. Not what we think it's doing, but what it's doing concretely. So you may ask, OK, you're right. We want to do instrumentation, but why choose Prometheus? The first thing to remember is that Prometheus is not only the server part, the thing that will collect and store metrics. It's also what we call the exposition format, like the thing that the applications are exposing. And this format over the years has been widely adopted across the board, across the industry. There are many other monitoring solutions that rely on that format. There is even a project called Open Metrics, which is hosted by the CNTF, and which is aiming to make that Prometheus exposition format something more neutral and an established that can be used by different monitoring solutions, not just Prometheus. So even if you adopt the Prometheus exposition format, doesn't mean that you have to use Prometheus. The next reason why metrics are a good choice is that adding metrics to your system shouldn't degrade the performances. Typically, modifying a metric value is something in the order of a few nanoseconds. There is no storage requirement. Everything is kept in memory. Everything is aggregated. So it's almost invisible when you add metrics to your application from a performance standpoint. And finally, you may have heard about Prometheus in the Kubernetes context. Like, people often think that they work side by side. But in practice, Prometheus is not limited to Kubernetes. It's also very relevant for more traditional environments, like virtual machines or even bare metal. And the good thing is that if you or when you move to more cloud-based environments, then if you have already Prometheus metrics in place, there will be almost no effort to keep that and to move to that. So now let's go more into the code and what it means to instrument an existing application. For this presentation, I have set up something really simple, which is a web application, like a Hello World. That's a Python application. I have instrumented it with the Python client library. I've got a Prometheus server running next to it, scraping it. And I've got a lot of manager in place that is receiving alerts from Prometheus. This is my application. I guess that's something really simple. It takes a name request parameter. So I can change that and say, change the name. I'm able to generate some errors. Like if I miss the name parameter, then it will return a 500 error. And the code without instrumentation is there. So really simple, 10 lines of code is just one function that does all the processing. So here I've got the version with instrumentation. And what I'm going to show you here for Python app is really something that the workflow is really similar, whether you are using Java, Go, C, et cetera. We will find the same steps when you want to instrument something. The first thing we need to do is to import some types, some classes from the Prometheus client library. So here we can see that we are importing three metric types, counter, gauge, histogram that I'm going to just describe. And then we need to initialize metrics. The first matrix I'm going to declare is a gauge. So a gauge is a snapshot in time of a measurement. That's something that can go up or down. Like any metric, it has a name here, building for. We also need to provide a description so that in the future we will be able to understand what the metric is all about. Here I've defined a label for the metric, which is called version. And the line after that, I'm using that metric. So since the metric has a label, I need to define the label value. So this is what I'm going to pass here. So this is the version of my application. And then I set the value of the gauge to a value, to a certain value. That example, that's a gauge that's not going to move as my application continues to live. The idea of that metric is that it will provide me information about which version I'm running. Next, we declare two counters. So unlike gauge, counters can only go up. They are accumulating values, accumulating either events or duration, whatever you want to track. So again, the first counter is counting the total number of requests that our application is doing. And the second counter is only counting the operations that request that fail. And they have no labels in that case. How do we use those counter metrics? Really simple. Here we look at the yellow function. Every time we enter the function, we just increment the yellow counter. And every time we fall into the we catch an exception, then we increment the fail counter. The last metric that I've shown here is an histogram. Histograms are useful to track typically durations, latency. There are more complex metric type compared to gauge and counters. The idea is that you will define buckets of values. And you will count how many events are falling in each bucket. So here the buckets are defined like this. So this is 0, 0, 0, 1 second. So I will count any request that takes at least that amount of time, less or that would take less that amount of time to complete. And again, to use it, I just need to wrap my yellow function or my yellow processing with some timing function so that the library will automatically keep up with tracking the latency. The last thing we need to do is to wire the metrics endpoint. And this is done here. Typically, a client library will have some utility function that you can use and that you can hear. We just need to import that function that will do all the heavy work for us and expose our metrics that we can see here. So that's the metrics endpoint. We see some metrics which are relative to the runtime, in that case, the Python runtime, so garbage collection metrics. We see also some process metrics, things that we get from the kernel. And we see our application metrics that we've defined. Here, the build info, here the number of requests that we've been processing so far. If I show you now in Prometheus, we can see that we've got here our application being monitored. And here, I can use the Prometheus UI to query my metrics. Here, I'm graphing the rate of HTTP requests that my application is processing over time. And I can do the same for the requests that are failing. So we see that we have some. And again, I can compute the percentage of requests here that are failing, which is about 2% on average. And I can also here make use of my histogram metrics. And I can compute the latency of 95% of my requests. So that's the 90th percentile. I've also defined alerts for my system. And we see one that is active, which is an alert firing when the Prometheus is detecting too many errors from my application. So there are a few things to think about when you start to instrument your systems. There are a few methods that are useful to know. The first one is called the rate method for rate errors duration. It's relevant for mostly web services, RPC servers, and so on. The idea is that you measure how many requests your system is doing, how many requests are failing, and the latency of the request so that you can alert when too many requests are failing or they take too long to complete. There's another method, which is called the use method for utilization, saturation errors. It's more relevant to track physical metrics, like memory. So you can say that you are using almost all the memory or almost all the disk. Finally, if you run things that are more close to processing pipelines, what you want in addition of the rate and the errors is to be able to track how fresh the data is, like you can insert some heartbeat events in your pipeline and measure how long it takes for your pipeline to process it. A few guidelines and good practices regarding instrumentation of application. First one, obviously, use one of the client libraries that is already available. Like we've seen, you will get out of the box many other metrics than just your application-specific metrics. Be consistent with naming of your metrics because that will reduce greatly your cognitive load when you need to exploit the metrics later on if you have something which you can predict about the name of the metric, then it's easier. Like if we track the duration of the HTTP request, we don't want to have a metrics called duration because it doesn't tell us a lot. HTTP request duration is better, but still not good because we don't know the unit of what we are tracking. HTTP request duration milliseconds is a bit better again. But then you can have people using seconds or other microseconds. And so it will not be consistent. What we recommend is that you always use the unit suffix and use international system units. Like in that case, always track duration as second, not microsecond, not milliseconds. Something to look after is not trying to overuse labels. Every label combination that your application will expose creates a new time series. Typical anti-pattern is your application is storing a user ID from the request. And you want to add that as a label. That's generally not a good idea. If you have hundreds of thousands of users, you will end up create hundreds of thousands of time series for a single application. Multiply that by the number of instances that are running your application. You can easily end up with millions of time series, which Prometheus is not designed to deal with. So in doubt, just refrain on defining too many labels. A good rule is to have something like in the order of maximum 1,000 to 10,000 time series for a single app. If you go that instrumentation path, focus first on things that matter for your customers. Then take time also to instrument what happens where your application is doing request to upstream services, like to your caching system, to your database, to some external APIs. That will also help you to pinpoint problems, pinpoint issues. Last thing to remember, for lack of a better term, I call them informational metrics. But they are like we've seen the building for metrics, something that you can use to provide more context about what's running. Typically, storing the version, the commit ID, is always a good choice, because you can then also correlate between different versions how the metrics are evolving. Quick word about alerting. We've seen that alerting rules are just regular PROMQL queries, nothing fancy. Once you get to know PROMQL, you will be able to create alerting rules very easily. Again, focus on what matters for your customers on the symptoms rather than the cause. So alert on the symptoms. But again, don't forget to have metrics to identify the causes. But do that in that order. First, focus on the symptoms, and then focus. Try to explore the causes. And it's OK to have alerts that fire when something happens badly in your dependencies. But try to treat that only as a second level of your urgency in general. So we come to the conclusion. I hope that I have convinced you that we should, as developer, take care about metrics and instrumentation from the start of the development cycle, just not as an afterthought. We've seen that metrics are cheap to implement. They don't degrade the performances. And they can definitely improve our software delivery process. And the last point is that, even though you are not using Prometheus, if you are looking for something open source, then have a look at Prometheus that's definitely the best open source solution today that exists. Thank you. And on that, I have finished. I don't think we have time for questions, but I'll be at the red ad booth this afternoon from 2 to 4 if you have more questions, or obviously right after the presentation. Thank you.


I'm Istok, I'm the co-founder of Agile Drop. It's a Drupal company based in Slovenia. We actually help digital agencies by integrating our developers to help them have more capacity when they have more work to do. We attend actually all, we try to attend all of the Drupal events all around the globe. Drupal Camp London is for us is second most important after DrupalCon. It has a big audience, it has a good location, a lot of people coming from all around the globe to here. So that's why I think it's super important for us to be here. It will be a network.


What's up everybody? JCM from jaspyscasebrakes.com 2021 panini Origins basketball just sold out. This is a three box one fourth case break random teams number one and again guys 28 total spots Remember, please know that some teams may have no relics autos or limited relics slash autos and we do have two combo teams guys Rockets paces one combo and nets and raptors is one combo. So here we go guys Here's the dice roller. Here's the customer names Robert down to Jonathan And then we got Hawks to the Wizards So let's roll it and we got ourselves a four to five nine times here you go one two three four five six seven eight and Ninth and final time. Yep What a Jeremy. How's it going man? Wattford down to Brett nine times Remember Nets Raptors combo Rockets Pacers combo nine times one two three four five six seven eight and Ninth and final time Nicks down to the Charlotte Hornets All right, there you go. So Brian you have the Nicks Brian Wofford That is Chad Meyer with the Celtics John L with the Clippers Thomas are with the Bucks Jonathan with the Wizards Peter with the 76ers Chris with the Bulls Paul Norton with the Magic Brian Wofford with the Jazz Robert Florida the T Wolves and Nuggets Robert Mancini with the Blazers where with the Hawks Simon you have the Nets Raptors combo Jonathan with the Grizzlies Paul the Cavs deal with the Suns Nathan Rossi with the Palak it up our pelicans. I was saying something else pelicans in thunder Nicholas with the heat Jeremy have the spurs mark with his pistons John the last one module Kings John with the Lakers Joseph came you have the Warriors Aaron with the Mavericks John L with the Rockets Pacers combo and Brett with the Charlotte Hornets So anybody wants to trade quick minute to trade I All right, so Hollywood saying Kings and Wizards are for trade and then Jeremy's proposing spurs for nuggets So Denver Nuggets owner if you're here Robert, let me know You want to propose a trade or accept that trade in the meantime really quickly? I'm gonna post up another What is it three bucks break? Bucks for Kings Thomas proposing for you Hollywood. Let me know if you want to accept that if not, I'm gonna close the guys All right, cool one trade done and let's just close it So bucks for Kings all right, so bucks now for Jonathan Thomas you have the Kings Sorry Jeremy, you know nobody wants a dead of asses. They're gonna be all yours, man Locked and ready that is for sure All right, so we did have one trade guys Jonathan has the bucks Thomas has the Kings and again fresh little case here of origins basketball, so It is a Three box one fourth case break, so I did post up the next three boxes for you guys I think they're all the same actually that's the same one too, but even the gray ones the gray ones are different I think that's hockey isn't it oh They could be too. Yeah, but the green ones are the same unless those are officially licensed all right guys, so four boxes here Or sorry three box break, so we're gonna do is we're gonna put three boxes here three boxes there and Three boxes here So we got one two three four. Let's see if we can roll a one through four One through four right here. No, it's a six It is a six again three this time one two three So just just prove to you or not prove to you guys. We want to show you guys that from the same case. I'm gonna Throw in three marks That way they stay the same. Did you call three Thomas do guys good luck Oh George and then he Edwards Minnesota two wheels with that one rower floors koala Leonard and a Zion Williamson to 75 It's very sweet for the pelicans right there We have for the Raptors Kyle Laurie That is 35 out of 49 so Raptors Rats is part of the combo team Simon and We have Obi-Tabin to 99 New York Knicks That's a nice little box right here, it'll be top in the anti-animers Zion number to 75 I have to say that's not a bad one Alright, excellent Victor Oladipo Tatum Simmons Kyrie Irving and one of one Kristoff's porzingis Uno of Uno very nice Denver or sorry not Denver Dallas Mavericks Going to Aaron with the Mavericks little one-to-one Larry legend Origins legendary signatures 12 out of 49 Cell takes one to Chad That is pretty sweet That is awesome And it will doka for the Utah Jazz when a Brian Nice two boxes so far all right guys last one Good luck Bama DeBio Kira Lewis Junior rookie sorry Who's a bitch nice James Wiseman and we got Jamal Murray Out of 99 we have for the club show kawai Leonard 49 out of 99 And we got ourselves a trade mojo Tyrese Halliburton that is a rookie autograph for the Sacramento Kings when a Thomas are Trade mojo there you go There you go James Wiseman also is a variation so for the Golden State Warriors Joseph can there you go nice three box break guys very very nice We got a Halliburne We got a Larry legend. We got a one-of-one Zion numbered Anthony Edwards Obi-Toppin, I have to say is a pretty nice three box break guys So I did post up number two it is in the store get ready back Jasper's case breaks calm


So this is what my job is about. I successfully implement three transporter robots in Singapore FAB. It's actually a step towards more opportunities to have more robots coming in. So I'm proud to contribute to these robotizations or modernizations in the FAB so users can perform more meaningful jobs and less manual tasks. Performing manual tasks through automations or even robotizations can make users get their tons done with just a simple click of buttons or simply just by placing a lot in the robots or machines and just walk away. So these routines or even manual tasks can be less human dependent, means fewer mistakes and higher quality products. Basically I just simplify complex tasks with just a push button or even by just placing the lots and just go off. So I actually move the labor intensive tasks to robots or even through automations. So for users, they can through all these solutions, they actually have a good experience. They can actually gain from it doing all these labor intensive tasks just to simplify it to make it simple for them. So by even meeting these goals, I actually provides these solutions to make it easy to use or even more effective and get things done more quickly. So my first day on Nasty is actually very tense but still full of excitement. So to know more people, even with the help of my colleagues, they make me more comfortable settling in Nasty so today I just love being part of Nasty. So automations helps with everyday tasks so it gives me motivations to continue to improve or even to provide more solutions to the users. So furthermore, seeing them using it with their happy faces pushes me to keep contributing and give me a sense of achievement. A city of future where technologies are everywhere, within easy reach, helping people with their day-to-day life, making operations run faster, more efficient and less waste. So this is all about my job.